zeed 1.3.0 → 1.4.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 (575) hide show
  1. package/AGENTS.md +50 -211
  2. package/README.md +16 -0
  3. package/dist/_experiments/bitcask.cjs +243 -1
  4. package/dist/_experiments/bitcask.cjs.map +1 -1
  5. package/dist/_experiments/bitcask.mjs +230 -1
  6. package/dist/_experiments/bitcask.mjs.map +1 -1
  7. package/dist/bin-BAoS4qtm.mjs +593 -0
  8. package/dist/{bin-SPdenYkw.mjs.map → bin-BAoS4qtm.mjs.map} +1 -1
  9. package/dist/bin-Ddaz2lxM.cjs +862 -0
  10. package/dist/{bin-Ce3i6ABn.cjs.map → bin-Ddaz2lxM.cjs.map} +1 -1
  11. package/dist/browser/base64.cjs +14 -1
  12. package/dist/browser/base64.cjs.map +1 -1
  13. package/dist/browser/base64.mjs +12 -1
  14. package/dist/browser/base64.mjs.map +1 -1
  15. package/dist/browser/gravatar.cjs +186 -1
  16. package/dist/browser/gravatar.cjs.map +1 -1
  17. package/dist/browser/gravatar.mjs +184 -1
  18. package/dist/browser/gravatar.mjs.map +1 -1
  19. package/dist/browser/index.cjs +14 -1
  20. package/dist/browser/index.mjs +8 -1
  21. package/dist/browser/localstorage.cjs +46 -1
  22. package/dist/browser/localstorage.cjs.map +1 -1
  23. package/dist/browser/localstorage.mjs +45 -1
  24. package/dist/browser/localstorage.mjs.map +1 -1
  25. package/dist/browser/log/index.cjs +8 -1
  26. package/dist/browser/log/index.mjs +5 -1
  27. package/dist/browser/log/log-browser-factory.cjs +65 -1
  28. package/dist/browser/log/log-browser-factory.cjs.map +1 -1
  29. package/dist/browser/log/log-browser-factory.mjs +64 -1
  30. package/dist/browser/log/log-browser-factory.mjs.map +1 -1
  31. package/dist/browser/log/log-browser.cjs +72 -1
  32. package/dist/browser/log/log-browser.cjs.map +1 -1
  33. package/dist/browser/log/log-browser.mjs +71 -1
  34. package/dist/browser/log/log-browser.mjs.map +1 -1
  35. package/dist/browser/log/log-colors.cjs +11 -1
  36. package/dist/browser/log/log-colors.cjs.map +1 -1
  37. package/dist/browser/log/log-colors.mjs +9 -1
  38. package/dist/browser/log/log-colors.mjs.map +1 -1
  39. package/dist/browser/log/log-context-browser.cjs +25 -1
  40. package/dist/browser/log/log-context-browser.cjs.map +1 -1
  41. package/dist/browser/log/log-context-browser.mjs +23 -1
  42. package/dist/browser/log/log-context-browser.mjs.map +1 -1
  43. package/dist/chunk-DQk6qfdC.mjs +18 -0
  44. package/dist/chunk-uaV2rQ02.cjs +53 -0
  45. package/dist/common/assert.cjs +22 -1
  46. package/dist/common/assert.cjs.map +1 -1
  47. package/dist/common/assert.mjs +19 -1
  48. package/dist/common/assert.mjs.map +1 -1
  49. package/dist/common/bin/index.cjs +106 -1
  50. package/dist/common/bin/index.cjs.map +1 -1
  51. package/dist/common/bin/index.mjs +98 -1
  52. package/dist/common/bin/index.mjs.map +1 -1
  53. package/dist/common/bin/lib0/binary.cjs +146 -1
  54. package/dist/common/bin/lib0/binary.cjs.map +1 -1
  55. package/dist/common/bin/lib0/binary.mjs +80 -1
  56. package/dist/common/bin/lib0/binary.mjs.map +1 -1
  57. package/dist/common/bin/lib0/buffer.cjs +42 -1
  58. package/dist/common/bin/lib0/buffer.cjs.map +1 -1
  59. package/dist/common/bin/lib0/buffer.mjs +38 -1
  60. package/dist/common/bin/lib0/buffer.mjs.map +1 -1
  61. package/dist/common/bin/lib0/create.cjs +24 -1
  62. package/dist/common/bin/lib0/create.cjs.map +1 -1
  63. package/dist/common/bin/lib0/create.mjs +21 -1
  64. package/dist/common/bin/lib0/create.mjs.map +1 -1
  65. package/dist/common/bin/lib0/decoding.cjs +325 -1
  66. package/dist/common/bin/lib0/decoding.cjs.map +1 -1
  67. package/dist/common/bin/lib0/decoding.mjs +298 -1
  68. package/dist/common/bin/lib0/decoding.mjs.map +1 -1
  69. package/dist/common/bin/lib0/encoding.cjs +404 -1
  70. package/dist/common/bin/lib0/encoding.cjs.map +1 -1
  71. package/dist/common/bin/lib0/encoding.mjs +377 -1
  72. package/dist/common/bin/lib0/encoding.mjs.map +1 -1
  73. package/dist/common/bin/lib0/string.cjs +81 -1
  74. package/dist/common/bin/lib0/string.cjs.map +1 -1
  75. package/dist/common/bin/lib0/string.mjs +71 -1
  76. package/dist/common/bin/lib0/string.mjs.map +1 -1
  77. package/dist/common/crypto/aes-sealed.cjs +34 -1
  78. package/dist/common/crypto/aes-sealed.cjs.map +1 -1
  79. package/dist/common/crypto/aes-sealed.mjs +32 -1
  80. package/dist/common/crypto/aes-sealed.mjs.map +1 -1
  81. package/dist/common/crypto/crypto.cjs +91 -1
  82. package/dist/common/crypto/crypto.cjs.map +1 -1
  83. package/dist/common/crypto/crypto.mjs +80 -1
  84. package/dist/common/crypto/crypto.mjs.map +1 -1
  85. package/dist/common/crypto/index.cjs +23 -1
  86. package/dist/common/crypto/index.mjs +5 -1
  87. package/dist/common/crypto/xaes.cjs +128 -1
  88. package/dist/common/crypto/xaes.cjs.map +1 -1
  89. package/dist/common/crypto/xaes.mjs +123 -1
  90. package/dist/common/crypto/xaes.mjs.map +1 -1
  91. package/dist/common/csv.cjs +49 -4
  92. package/dist/common/csv.cjs.map +1 -1
  93. package/dist/common/csv.mjs +46 -4
  94. package/dist/common/csv.mjs.map +1 -1
  95. package/dist/common/data/array.cjs +299 -1
  96. package/dist/common/data/array.cjs.map +1 -1
  97. package/dist/common/data/array.mjs +274 -1
  98. package/dist/common/data/array.mjs.map +1 -1
  99. package/dist/common/data/basex-secure.cjs +30 -1
  100. package/dist/common/data/basex-secure.mjs +3 -1
  101. package/dist/common/data/basex.cjs +163 -1
  102. package/dist/common/data/basex.cjs.map +1 -1
  103. package/dist/common/data/basex.mjs +152 -1
  104. package/dist/common/data/basex.mjs.map +1 -1
  105. package/dist/common/data/bin-types.mjs +1 -1
  106. package/dist/common/data/bin.cjs +21 -1
  107. package/dist/common/data/bin.mjs +3 -1
  108. package/dist/common/data/camelcase.cjs +27 -1
  109. package/dist/common/data/camelcase.cjs.map +1 -1
  110. package/dist/common/data/camelcase.mjs +22 -1
  111. package/dist/common/data/camelcase.mjs.map +1 -1
  112. package/dist/common/data/convert.cjs +104 -1
  113. package/dist/common/data/convert.cjs.map +1 -1
  114. package/dist/common/data/convert.mjs +88 -1
  115. package/dist/common/data/convert.mjs.map +1 -1
  116. package/dist/common/data/datauri.cjs +32 -1
  117. package/dist/common/data/datauri.cjs.map +1 -1
  118. package/dist/common/data/datauri.mjs +27 -1
  119. package/dist/common/data/datauri.mjs.map +1 -1
  120. package/dist/common/data/day-legacy.cjs +148 -1
  121. package/dist/common/data/day-legacy.cjs.map +1 -1
  122. package/dist/common/data/day-legacy.mjs +143 -1
  123. package/dist/common/data/day-legacy.mjs.map +1 -1
  124. package/dist/common/data/day.cjs +335 -1
  125. package/dist/common/data/day.cjs.map +1 -1
  126. package/dist/common/data/day.mjs +305 -1
  127. package/dist/common/data/day.mjs.map +1 -1
  128. package/dist/common/data/decimal.cjs +28 -1
  129. package/dist/common/data/decimal.cjs.map +1 -1
  130. package/dist/common/data/decimal.mjs +23 -1
  131. package/dist/common/data/decimal.mjs.map +1 -1
  132. package/dist/common/data/deep.cjs +57 -1
  133. package/dist/common/data/deep.cjs.map +1 -1
  134. package/dist/common/data/deep.mjs +54 -1
  135. package/dist/common/data/deep.mjs.map +1 -1
  136. package/dist/common/data/diff.cjs +62 -1
  137. package/dist/common/data/diff.cjs.map +1 -1
  138. package/dist/common/data/diff.mjs +60 -1
  139. package/dist/common/data/diff.mjs.map +1 -1
  140. package/dist/common/data/distributed.cjs +24 -1
  141. package/dist/common/data/distributed.cjs.map +1 -1
  142. package/dist/common/data/distributed.mjs +22 -1
  143. package/dist/common/data/distributed.mjs.map +1 -1
  144. package/dist/common/data/format.cjs +63 -1
  145. package/dist/common/data/format.cjs.map +1 -1
  146. package/dist/common/data/format.mjs +59 -1
  147. package/dist/common/data/format.mjs.map +1 -1
  148. package/dist/common/data/html.cjs +13 -1
  149. package/dist/common/data/html.cjs.map +1 -1
  150. package/dist/common/data/html.mjs +10 -1
  151. package/dist/common/data/html.mjs.map +1 -1
  152. package/dist/common/data/index.cjs +296 -1
  153. package/dist/common/data/index.mjs +37 -1
  154. package/dist/common/data/is.cjs +106 -1
  155. package/dist/common/data/is.cjs.map +1 -1
  156. package/dist/common/data/is.mjs +85 -1
  157. package/dist/common/data/is.mjs.map +1 -1
  158. package/dist/common/data/json.cjs +70 -1
  159. package/dist/common/data/json.cjs.map +1 -1
  160. package/dist/common/data/json.mjs +65 -1
  161. package/dist/common/data/json.mjs.map +1 -1
  162. package/dist/common/data/list.cjs +32 -1
  163. package/dist/common/data/list.cjs.map +1 -1
  164. package/dist/common/data/list.mjs +27 -1
  165. package/dist/common/data/list.mjs.map +1 -1
  166. package/dist/common/data/lru.mjs +1 -1
  167. package/dist/common/data/math.cjs +79 -1
  168. package/dist/common/data/math.cjs.map +1 -1
  169. package/dist/common/data/math.mjs +65 -1
  170. package/dist/common/data/math.mjs.map +1 -1
  171. package/dist/common/data/message.cjs +30 -1
  172. package/dist/common/data/message.cjs.map +1 -1
  173. package/dist/common/data/message.mjs +28 -1
  174. package/dist/common/data/message.mjs.map +1 -1
  175. package/dist/common/data/object-changes.cjs +66 -1
  176. package/dist/common/data/object-changes.cjs.map +1 -1
  177. package/dist/common/data/object-changes.mjs +63 -1
  178. package/dist/common/data/object-changes.mjs.map +1 -1
  179. package/dist/common/data/object.cjs +112 -1
  180. package/dist/common/data/object.cjs.map +1 -1
  181. package/dist/common/data/object.mjs +104 -1
  182. package/dist/common/data/object.mjs.map +1 -1
  183. package/dist/common/data/orderby.cjs +42 -1
  184. package/dist/common/data/orderby.cjs.map +1 -1
  185. package/dist/common/data/orderby.mjs +37 -1
  186. package/dist/common/data/orderby.mjs.map +1 -1
  187. package/dist/common/data/path.cjs +26 -1
  188. package/dist/common/data/path.cjs.map +1 -1
  189. package/dist/common/data/path.mjs +25 -1
  190. package/dist/common/data/path.mjs.map +1 -1
  191. package/dist/common/data/regexp.cjs +12 -1
  192. package/dist/common/data/regexp.cjs.map +1 -1
  193. package/dist/common/data/regexp.mjs +10 -1
  194. package/dist/common/data/regexp.mjs.map +1 -1
  195. package/dist/common/data/rounding.cjs +107 -1
  196. package/dist/common/data/rounding.cjs.map +1 -1
  197. package/dist/common/data/rounding.mjs +95 -1
  198. package/dist/common/data/rounding.mjs.map +1 -1
  199. package/dist/common/data/signal.cjs +39 -1
  200. package/dist/common/data/signal.cjs.map +1 -1
  201. package/dist/common/data/signal.mjs +38 -1
  202. package/dist/common/data/signal.mjs.map +1 -1
  203. package/dist/common/data/sortable.cjs +35 -1
  204. package/dist/common/data/sortable.cjs.map +1 -1
  205. package/dist/common/data/sortable.mjs +31 -1
  206. package/dist/common/data/sortable.mjs.map +1 -1
  207. package/dist/common/data/sorted.cjs +54 -1
  208. package/dist/common/data/sorted.cjs.map +1 -1
  209. package/dist/common/data/sorted.mjs +53 -1
  210. package/dist/common/data/sorted.mjs.map +1 -1
  211. package/dist/common/data/string-deburr.cjs +240 -1
  212. package/dist/common/data/string-deburr.cjs.map +1 -1
  213. package/dist/common/data/string-deburr.mjs +238 -1
  214. package/dist/common/data/string-deburr.mjs.map +1 -1
  215. package/dist/common/data/string-hash-fnv.cjs +69 -1
  216. package/dist/common/data/string-hash-fnv.cjs.map +1 -1
  217. package/dist/common/data/string-hash-fnv.mjs +67 -1
  218. package/dist/common/data/string-hash-fnv.mjs.map +1 -1
  219. package/dist/common/data/string-hash-pool.cjs +28 -1
  220. package/dist/common/data/string-hash-pool.cjs.map +1 -1
  221. package/dist/common/data/string-hash-pool.mjs +27 -1
  222. package/dist/common/data/string-hash-pool.mjs.map +1 -1
  223. package/dist/common/data/url.cjs +98 -2
  224. package/dist/common/data/url.cjs.map +1 -1
  225. package/dist/common/data/url.mjs +91 -2
  226. package/dist/common/data/url.mjs.map +1 -1
  227. package/dist/common/data/utils.cjs +118 -1
  228. package/dist/common/data/utils.cjs.map +1 -1
  229. package/dist/common/data/utils.mjs +107 -1
  230. package/dist/common/data/utils.mjs.map +1 -1
  231. package/dist/common/data/wordlist.cjs +531 -1
  232. package/dist/common/data/wordlist.cjs.map +1 -1
  233. package/dist/common/data/wordlist.mjs +529 -1
  234. package/dist/common/data/wordlist.mjs.map +1 -1
  235. package/dist/common/data/xrx.cjs +96 -1
  236. package/dist/common/data/xrx.cjs.map +1 -1
  237. package/dist/common/data/xrx.mjs +92 -1
  238. package/dist/common/data/xrx.mjs.map +1 -1
  239. package/dist/common/dispose-defer.cjs +133 -1
  240. package/dist/common/dispose-defer.cjs.map +1 -1
  241. package/dist/common/dispose-defer.mjs +130 -1
  242. package/dist/common/dispose-defer.mjs.map +1 -1
  243. package/dist/common/dispose-types.mjs +1 -1
  244. package/dist/common/dispose-utils.cjs +113 -1
  245. package/dist/common/dispose-utils.cjs.map +1 -1
  246. package/dist/common/dispose-utils.mjs +106 -1
  247. package/dist/common/dispose-utils.mjs.map +1 -1
  248. package/dist/common/exec/index.cjs +24 -1
  249. package/dist/common/exec/index.d.cts +1 -1
  250. package/dist/common/exec/index.d.mts +1 -1
  251. package/dist/common/exec/index.mjs +8 -1
  252. package/dist/common/exec/mutex.cjs +44 -1
  253. package/dist/common/exec/mutex.cjs.map +1 -1
  254. package/dist/common/exec/mutex.mjs +42 -1
  255. package/dist/common/exec/mutex.mjs.map +1 -1
  256. package/dist/common/exec/pool.cjs +181 -1
  257. package/dist/common/exec/pool.cjs.map +1 -1
  258. package/dist/common/exec/pool.d.cts +1 -1
  259. package/dist/common/exec/pool.d.mts +1 -1
  260. package/dist/common/exec/pool.mjs +180 -1
  261. package/dist/common/exec/pool.mjs.map +1 -1
  262. package/dist/common/exec/progress.cjs +149 -1
  263. package/dist/common/exec/progress.cjs.map +1 -1
  264. package/dist/common/exec/progress.d.cts +1 -1
  265. package/dist/common/exec/progress.d.mts +1 -1
  266. package/dist/common/exec/progress.mjs +148 -1
  267. package/dist/common/exec/progress.mjs.map +1 -1
  268. package/dist/common/exec/promise.cjs +113 -1
  269. package/dist/common/exec/promise.cjs.map +1 -1
  270. package/dist/common/exec/promise.mjs +103 -1
  271. package/dist/common/exec/promise.mjs.map +1 -1
  272. package/dist/common/exec/queue.cjs +125 -1
  273. package/dist/common/exec/queue.cjs.map +1 -1
  274. package/dist/common/exec/queue.d.cts +1 -1
  275. package/dist/common/exec/queue.d.mts +1 -1
  276. package/dist/common/exec/queue.mjs +124 -1
  277. package/dist/common/exec/queue.mjs.map +1 -1
  278. package/dist/common/exec/throttle-debounce.cjs +114 -1
  279. package/dist/common/exec/throttle-debounce.cjs.map +1 -1
  280. package/dist/common/exec/throttle-debounce.mjs +112 -1
  281. package/dist/common/exec/throttle-debounce.mjs.map +1 -1
  282. package/dist/common/global.cjs +22 -1
  283. package/dist/common/global.cjs.map +1 -1
  284. package/dist/common/global.mjs +19 -1
  285. package/dist/common/global.mjs.map +1 -1
  286. package/dist/common/index.cjs +559 -1
  287. package/dist/common/index.d.cts +1 -1
  288. package/dist/common/index.d.mts +1 -1
  289. package/dist/common/index.mjs +89 -1
  290. package/dist/common/localhost.cjs +16 -1
  291. package/dist/common/localhost.cjs.map +1 -1
  292. package/dist/common/localhost.mjs +14 -1
  293. package/dist/common/localhost.mjs.map +1 -1
  294. package/dist/common/log/index.cjs +34 -1
  295. package/dist/common/log/index.mjs +11 -1
  296. package/dist/common/log/log-base.cjs +40 -1
  297. package/dist/common/log/log-base.cjs.map +1 -1
  298. package/dist/common/log/log-base.mjs +31 -1
  299. package/dist/common/log/log-base.mjs.map +1 -1
  300. package/dist/common/log/log-colors.cjs +92 -1
  301. package/dist/common/log/log-colors.cjs.map +1 -1
  302. package/dist/common/log/log-colors.mjs +90 -1
  303. package/dist/common/log/log-colors.mjs.map +1 -1
  304. package/dist/common/log/log-config.cjs +15 -1
  305. package/dist/common/log/log-config.cjs.map +1 -1
  306. package/dist/common/log/log-config.mjs +14 -1
  307. package/dist/common/log/log-config.mjs.map +1 -1
  308. package/dist/common/log/log-console-capture.cjs +33 -1
  309. package/dist/common/log/log-console-capture.cjs.map +1 -1
  310. package/dist/common/log/log-console-capture.mjs +32 -1
  311. package/dist/common/log/log-console-capture.mjs.map +1 -1
  312. package/dist/common/log/log-console-original.cjs +27 -1
  313. package/dist/common/log/log-console-original.cjs.map +1 -1
  314. package/dist/common/log/log-console-original.mjs +26 -1
  315. package/dist/common/log/log-console-original.mjs.map +1 -1
  316. package/dist/common/log/log-console.cjs +39 -1
  317. package/dist/common/log/log-console.cjs.map +1 -1
  318. package/dist/common/log/log-console.mjs +38 -1
  319. package/dist/common/log/log-console.mjs.map +1 -1
  320. package/dist/common/log/log-context.cjs +109 -1
  321. package/dist/common/log/log-context.cjs.map +1 -1
  322. package/dist/common/log/log-context.mjs +108 -1
  323. package/dist/common/log/log-context.mjs.map +1 -1
  324. package/dist/common/log/log-filter.cjs +80 -1
  325. package/dist/common/log/log-filter.cjs.map +1 -1
  326. package/dist/common/log/log-filter.mjs +75 -1
  327. package/dist/common/log/log-filter.mjs.map +1 -1
  328. package/dist/common/log/log-memory.cjs +45 -1
  329. package/dist/common/log/log-memory.cjs.map +1 -1
  330. package/dist/common/log/log-memory.mjs +43 -1
  331. package/dist/common/log/log-memory.mjs.map +1 -1
  332. package/dist/common/log/log-noop.cjs +17 -1
  333. package/dist/common/log/log-noop.cjs.map +1 -1
  334. package/dist/common/log/log-noop.mjs +15 -1
  335. package/dist/common/log/log-noop.mjs.map +1 -1
  336. package/dist/common/log/log.cjs +46 -1
  337. package/dist/common/log/log.cjs.map +1 -1
  338. package/dist/common/log/log.mjs +43 -1
  339. package/dist/common/log/log.mjs.map +1 -1
  340. package/dist/common/msg/channel-debug.cjs +17 -1
  341. package/dist/common/msg/channel-debug.cjs.map +1 -1
  342. package/dist/common/msg/channel-debug.d.cts +1 -1
  343. package/dist/common/msg/channel-debug.d.mts +1 -1
  344. package/dist/common/msg/channel-debug.mjs +16 -1
  345. package/dist/common/msg/channel-debug.mjs.map +1 -1
  346. package/dist/common/msg/channel-local.cjs +28 -1
  347. package/dist/common/msg/channel-local.cjs.map +1 -1
  348. package/dist/common/msg/channel-local.d.cts +1 -1
  349. package/dist/common/msg/channel-local.d.mts +1 -1
  350. package/dist/common/msg/channel-local.mjs +26 -1
  351. package/dist/common/msg/channel-local.mjs.map +1 -1
  352. package/dist/common/msg/channel-resilient.cjs +63 -1
  353. package/dist/common/msg/channel-resilient.cjs.map +1 -1
  354. package/dist/common/msg/channel-resilient.d.cts +1 -1
  355. package/dist/common/msg/channel-resilient.d.mts +1 -1
  356. package/dist/common/msg/channel-resilient.mjs +62 -1
  357. package/dist/common/msg/channel-resilient.mjs.map +1 -1
  358. package/dist/common/msg/channel-wkwebview.cjs +35 -1
  359. package/dist/common/msg/channel-wkwebview.cjs.map +1 -1
  360. package/dist/common/msg/channel-wkwebview.d.cts +2 -1
  361. package/dist/common/msg/channel-wkwebview.d.mts +2 -1
  362. package/dist/common/msg/channel-wkwebview.mjs +34 -1
  363. package/dist/common/msg/channel-wkwebview.mjs.map +1 -1
  364. package/dist/common/msg/channel.cjs +23 -1
  365. package/dist/common/msg/channel.cjs.map +1 -1
  366. package/dist/common/msg/channel.d.cts +1 -1
  367. package/dist/common/msg/channel.d.mts +1 -1
  368. package/dist/common/msg/channel.mjs +22 -1
  369. package/dist/common/msg/channel.mjs.map +1 -1
  370. package/dist/common/msg/emitter.cjs +141 -1
  371. package/dist/common/msg/emitter.cjs.map +1 -1
  372. package/dist/common/msg/emitter.d.cts +1 -1
  373. package/dist/common/msg/emitter.d.mts +1 -1
  374. package/dist/common/msg/emitter.mjs +139 -1
  375. package/dist/common/msg/emitter.mjs.map +1 -1
  376. package/dist/common/msg/encoder.cjs +38 -1
  377. package/dist/common/msg/encoder.cjs.map +1 -1
  378. package/dist/common/msg/encoder.mjs +35 -1
  379. package/dist/common/msg/encoder.mjs.map +1 -1
  380. package/dist/common/msg/index.cjs +28 -1
  381. package/dist/common/msg/index.d.cts +1 -1
  382. package/dist/common/msg/index.d.mts +1 -1
  383. package/dist/common/msg/index.mjs +11 -1
  384. package/dist/common/msg/messages.cjs +135 -1
  385. package/dist/common/msg/messages.cjs.map +1 -1
  386. package/dist/common/msg/messages.d.cts +1 -1
  387. package/dist/common/msg/messages.d.mts +1 -1
  388. package/dist/common/msg/messages.mjs +133 -1
  389. package/dist/common/msg/messages.mjs.map +1 -1
  390. package/dist/common/msg/pipe.mjs +1 -1
  391. package/dist/common/msg/pubsub.cjs +78 -1
  392. package/dist/common/msg/pubsub.cjs.map +1 -1
  393. package/dist/common/msg/pubsub.d.cts +1 -1
  394. package/dist/common/msg/pubsub.d.mts +1 -1
  395. package/dist/common/msg/pubsub.mjs +76 -1
  396. package/dist/common/msg/pubsub.mjs.map +1 -1
  397. package/dist/common/msg/rpc.cjs +142 -1
  398. package/dist/common/msg/rpc.cjs.map +1 -1
  399. package/dist/common/msg/rpc.mjs +139 -1
  400. package/dist/common/msg/rpc.mjs.map +1 -1
  401. package/dist/common/network.cjs +129 -1
  402. package/dist/common/network.cjs.map +1 -1
  403. package/dist/common/network.mjs +122 -1
  404. package/dist/common/network.mjs.map +1 -1
  405. package/dist/common/platform.cjs +92 -1
  406. package/dist/common/platform.cjs.map +1 -1
  407. package/dist/common/platform.mjs +84 -1
  408. package/dist/common/platform.mjs.map +1 -1
  409. package/dist/common/schema/_sandbox/sandbox-inherit.mjs +1 -1
  410. package/dist/common/schema/_sandbox/sandbox.mjs +1 -1
  411. package/dist/common/schema/_sandbox/sandbox.xspec.mjs +1 -1
  412. package/dist/common/schema/export-json-schema.cjs +54 -1
  413. package/dist/common/schema/export-json-schema.cjs.map +1 -1
  414. package/dist/common/schema/export-json-schema.mjs +52 -1
  415. package/dist/common/schema/export-json-schema.mjs.map +1 -1
  416. package/dist/common/schema/export-swift.cjs +30 -2
  417. package/dist/common/schema/export-swift.cjs.map +1 -1
  418. package/dist/common/schema/export-swift.mjs +29 -2
  419. package/dist/common/schema/export-swift.mjs.map +1 -1
  420. package/dist/common/schema/export-typescript.cjs +20 -2
  421. package/dist/common/schema/export-typescript.cjs.map +1 -1
  422. package/dist/common/schema/export-typescript.mjs +19 -2
  423. package/dist/common/schema/export-typescript.mjs.map +1 -1
  424. package/dist/common/schema/index.cjs +55 -1
  425. package/dist/common/schema/index.mjs +12 -1
  426. package/dist/common/schema/parse-args.cjs +62 -2
  427. package/dist/common/schema/parse-args.cjs.map +1 -1
  428. package/dist/common/schema/parse-args.mjs +60 -2
  429. package/dist/common/schema/parse-args.mjs.map +1 -1
  430. package/dist/common/schema/parse-env.cjs +48 -3
  431. package/dist/common/schema/parse-env.cjs.map +1 -1
  432. package/dist/common/schema/parse-env.mjs +46 -3
  433. package/dist/common/schema/parse-env.mjs.map +1 -1
  434. package/dist/common/schema/parse-object.cjs +122 -1
  435. package/dist/common/schema/parse-object.cjs.map +1 -1
  436. package/dist/common/schema/parse-object.mjs +119 -1
  437. package/dist/common/schema/parse-object.mjs.map +1 -1
  438. package/dist/common/schema/schema-standard.mjs +1 -1
  439. package/dist/common/schema/schema.cjs +423 -1
  440. package/dist/common/schema/schema.cjs.map +1 -1
  441. package/dist/common/schema/schema.mjs +404 -1
  442. package/dist/common/schema/schema.mjs.map +1 -1
  443. package/dist/common/schema/serialize.cjs +109 -1
  444. package/dist/common/schema/serialize.cjs.map +1 -1
  445. package/dist/common/schema/serialize.mjs +107 -1
  446. package/dist/common/schema/serialize.mjs.map +1 -1
  447. package/dist/common/schema/type-test.mjs +1 -1
  448. package/dist/common/schema/utils.cjs +25 -1
  449. package/dist/common/schema/utils.cjs.map +1 -1
  450. package/dist/common/schema/utils.mjs +19 -1
  451. package/dist/common/schema/utils.mjs.map +1 -1
  452. package/dist/common/schema/z-collection.cjs +51 -1
  453. package/dist/common/schema/z-collection.mjs +27 -1
  454. package/dist/common/schema/z.cjs +9 -1
  455. package/dist/common/schema/z.mjs +3 -1
  456. package/dist/common/storage/index.cjs +4 -1
  457. package/dist/common/storage/index.mjs +3 -1
  458. package/dist/common/storage/memstorage.cjs +26 -1
  459. package/dist/common/storage/memstorage.cjs.map +1 -1
  460. package/dist/common/storage/memstorage.mjs +25 -1
  461. package/dist/common/storage/memstorage.mjs.map +1 -1
  462. package/dist/common/test.cjs +14 -1
  463. package/dist/common/test.cjs.map +1 -1
  464. package/dist/common/test.mjs +13 -1
  465. package/dist/common/test.mjs.map +1 -1
  466. package/dist/common/time.cjs +220 -1
  467. package/dist/common/time.cjs.map +1 -1
  468. package/dist/common/time.mjs +194 -1
  469. package/dist/common/time.mjs.map +1 -1
  470. package/dist/common/timeout.cjs +27 -1
  471. package/dist/common/timeout.cjs.map +1 -1
  472. package/dist/common/timeout.mjs +25 -1
  473. package/dist/common/timeout.mjs.map +1 -1
  474. package/dist/common/types.mjs +1 -1
  475. package/dist/common/utils.cjs +7 -1
  476. package/dist/common/utils.cjs.map +1 -1
  477. package/dist/common/utils.mjs +5 -1
  478. package/dist/common/utils.mjs.map +1 -1
  479. package/dist/common/uuid.cjs +307 -1
  480. package/dist/common/uuid.cjs.map +1 -1
  481. package/dist/common/uuid.mjs +284 -1
  482. package/dist/common/uuid.mjs.map +1 -1
  483. package/dist/{index-DHXVOH8h.d.cts → index-CFkMqHvX.d.cts} +1 -2
  484. package/dist/{index-DMaPyx9O.d.mts → index-C_3Y_s6f.d.mts} +1 -2
  485. package/dist/index.all.cjs +641 -1
  486. package/dist/index.all.d.cts +1 -1
  487. package/dist/index.all.d.mts +1 -1
  488. package/dist/index.all.mjs +113 -1
  489. package/dist/index.browser.cjs +576 -1
  490. package/dist/index.browser.d.cts +1 -1
  491. package/dist/index.browser.d.mts +1 -1
  492. package/dist/index.browser.mjs +98 -1
  493. package/dist/index.jsr.cjs +57 -1
  494. package/dist/index.jsr.mjs +6 -1
  495. package/dist/index.node.cjs +628 -1
  496. package/dist/index.node.d.cts +1 -1
  497. package/dist/index.node.d.mts +1 -1
  498. package/dist/index.node.mjs +106 -1
  499. package/dist/node/args.cjs +56 -1
  500. package/dist/node/args.cjs.map +1 -1
  501. package/dist/node/args.mjs +53 -1
  502. package/dist/node/args.mjs.map +1 -1
  503. package/dist/node/clipboard.cjs +18 -1
  504. package/dist/node/clipboard.cjs.map +1 -1
  505. package/dist/node/clipboard.mjs +16 -1
  506. package/dist/node/clipboard.mjs.map +1 -1
  507. package/dist/node/crypto.cjs +28 -1
  508. package/dist/node/crypto.cjs.map +1 -1
  509. package/dist/node/crypto.mjs +24 -1
  510. package/dist/node/crypto.mjs.map +1 -1
  511. package/dist/node/env.cjs +100 -4
  512. package/dist/node/env.cjs.map +1 -1
  513. package/dist/node/env.mjs +90 -4
  514. package/dist/node/env.mjs.map +1 -1
  515. package/dist/node/files-async.cjs +66 -1
  516. package/dist/node/files-async.cjs.map +1 -1
  517. package/dist/node/files-async.mjs +60 -1
  518. package/dist/node/files-async.mjs.map +1 -1
  519. package/dist/node/files.cjs +52 -1
  520. package/dist/node/files.cjs.map +1 -1
  521. package/dist/node/files.mjs +46 -1
  522. package/dist/node/files.mjs.map +1 -1
  523. package/dist/node/filestorage.cjs +100 -1
  524. package/dist/node/filestorage.cjs.map +1 -1
  525. package/dist/node/filestorage.mjs +97 -1
  526. package/dist/node/filestorage.mjs.map +1 -1
  527. package/dist/node/fs.cjs +119 -1
  528. package/dist/node/fs.cjs.map +1 -1
  529. package/dist/node/fs.mjs +101 -1
  530. package/dist/node/fs.mjs.map +1 -1
  531. package/dist/node/glob.cjs +75 -1
  532. package/dist/node/glob.cjs.map +1 -1
  533. package/dist/node/glob.mjs +73 -1
  534. package/dist/node/glob.mjs.map +1 -1
  535. package/dist/node/index.cjs +66 -1
  536. package/dist/node/index.mjs +16 -1
  537. package/dist/node/log/index.cjs +20 -1
  538. package/dist/node/log/index.mjs +7 -1
  539. package/dist/node/log/log-context-node.cjs +39 -1
  540. package/dist/node/log/log-context-node.cjs.map +1 -1
  541. package/dist/node/log/log-context-node.mjs +35 -1
  542. package/dist/node/log/log-context-node.mjs.map +1 -1
  543. package/dist/node/log/log-file-rotation.cjs +71 -1
  544. package/dist/node/log/log-file-rotation.cjs.map +1 -1
  545. package/dist/node/log/log-file-rotation.mjs +68 -1
  546. package/dist/node/log/log-file-rotation.mjs.map +1 -1
  547. package/dist/node/log/log-file.cjs +57 -1
  548. package/dist/node/log/log-file.cjs.map +1 -1
  549. package/dist/node/log/log-file.mjs +54 -1
  550. package/dist/node/log/log-file.mjs.map +1 -1
  551. package/dist/node/log/log-node.cjs +162 -1
  552. package/dist/node/log/log-node.cjs.map +1 -1
  553. package/dist/node/log/log-node.mjs +155 -1
  554. package/dist/node/log/log-node.mjs.map +1 -1
  555. package/dist/node/log/log-rotation.cjs +543 -3
  556. package/dist/node/log/log-rotation.cjs.map +1 -1
  557. package/dist/node/log/log-rotation.mjs +538 -3
  558. package/dist/node/log/log-rotation.mjs.map +1 -1
  559. package/dist/node/log/log-util.cjs +69 -3
  560. package/dist/node/log/log-util.cjs.map +1 -1
  561. package/dist/node/log/log-util.mjs +63 -3
  562. package/dist/node/log/log-util.mjs.map +1 -1
  563. package/dist/node/open-browser.cjs +20 -1
  564. package/dist/node/open-browser.cjs.map +1 -1
  565. package/dist/node/open-browser.mjs +18 -1
  566. package/dist/node/open-browser.mjs.map +1 -1
  567. package/package.json +15 -15
  568. package/src/common/schema/README.md +247 -66
  569. package/src/eslint-defaults.js +4 -0
  570. package/src/index.spec.ts +6 -6
  571. package/dist/bin-Ce3i6ABn.cjs +0 -3
  572. package/dist/bin-SPdenYkw.mjs +0 -3
  573. package/dist/chunk-0Lt9GpW0.mjs +0 -1
  574. package/dist/chunk-D-qHiVGv.cjs +0 -1
  575. package/src/common/schema/README-SCHEMA.md +0 -0
@@ -1,2 +1,123 @@
1
- import{jsonParse as e,jsonStringifySafe as t}from"./data/json.mjs";import{isArray as n}from"./data/is.mjs";import{DefaultLogger as r}from"./log/log.mjs";import{h as i}from"../bin-SPdenYkw.mjs";import{arrayFlatten as a}from"./data/array.mjs";import{deepMerge as o}from"./data/deep.mjs";import{encodeQuery as s}from"./data/url.mjs";const c={cache:`no-cache`,redirect:`follow`,headers:{}};function l(e){let t=/:\/\/([^@]*)@/.exec(e);if(t&&t[1]){let[n,r]=t[1].split(`:`,2);return{url:e.replace(`${t[1]}@`,``),username:n,password:r}}}async function u(e,t={},i=fetch){try{n(t)&&(t=o({},...a(t)));let s=l(String(e));s&&(e=s.url,t=o({},t,h(s.username,s.password))),t.headers!=null&&!(t.headers instanceof Headers)&&(t.headers=new Headers(t.headers));let c=await i(String(e),t);if(c.status<400)return c;let u=r(`zeed:network`);try{u.warn(`Fetch of ${String(e)} returned status=${c.status}. Options:`,t),u.warn(`Response: ${await c.text()}`)}catch(e){u.error(`Exception:`,e)}}catch(e){r(`zeed:network`).error(`fetchBasic`,e)}}async function d(t,n={},i=fetch){try{let r=await u(t,[{method:`GET`,headers:{Accept:`application/json`}},n],i);if(r)return e(await r.text())}catch(e){r(`zeed:network`).error(`fetchJSON error:`,e)}}async function f(e,t={},n=fetch){try{let r=await u(e,[c,{method:`GET`},t],n);if(r)return await r.text()}catch(e){r(`zeed:network`).error(`fetchHTML error:`,e)}}function p(e,t=`POST`){return{method:t,...c,headers:{"Content-Type":`application/x-www-form-urlencoded; charset=utf-8`},body:s(e)}}function m(e,n=`POST`){return{method:n,...c,headers:{"Content-Type":`application/json; charset=utf-8`},body:t(e)}}function h(e,t){return{headers:{Authorization:`Basic ${i(`${e}:${t}`)}`}}}export{u as fetchBasic,d as fetchJson,h as fetchOptionsBasicAuth,p as fetchOptionsFormURLEncoded,m as fetchOptionsJson,f as fetchText,l as parseBasicAuth};
1
+ import { jsonParse, jsonStringifySafe } from "./data/json.mjs";
2
+ import { isArray } from "./data/is.mjs";
3
+ import { DefaultLogger } from "./log/log.mjs";
4
+ import { h as toBase64 } from "../bin-BAoS4qtm.mjs";
5
+ import { arrayFlatten } from "./data/array.mjs";
6
+ import { deepMerge } from "./data/deep.mjs";
7
+ import { encodeQuery } from "./data/url.mjs";
8
+
9
+ //#region src/common/network.ts
10
+ const defaultOptions = {
11
+ cache: "no-cache",
12
+ redirect: "follow",
13
+ headers: {}
14
+ };
15
+ function parseBasicAuth(url) {
16
+ const m = /:\/\/([^@]*)@/.exec(url);
17
+ if (m && m[1]) {
18
+ const [username, password] = m[1].split(":", 2);
19
+ return {
20
+ url: url.replace(`${m[1]}@`, ""),
21
+ username,
22
+ password
23
+ };
24
+ }
25
+ }
26
+ /**
27
+ * Simplified `fetch` wrapper.
28
+ * - Accepts a single fetch options object or an array of options which will be deep-merged.
29
+ * - Supports basic auth embedded in the URL (e.g. https://user:pass@host/path).
30
+ * - Normalizes headers to a `Headers` instance.
31
+ * - Returns the `Response` when status < 400, otherwise returns `undefined`.
32
+ * @category Network
33
+ */
34
+ async function fetchBasic(url, fetchOptions = {}, fetchFn = fetch) {
35
+ try {
36
+ if (isArray(fetchOptions)) fetchOptions = deepMerge({}, ...arrayFlatten(fetchOptions));
37
+ const auth = parseBasicAuth(String(url));
38
+ if (auth) {
39
+ url = auth.url;
40
+ fetchOptions = deepMerge({}, fetchOptions, fetchOptionsBasicAuth(auth.username, auth.password));
41
+ }
42
+ if (fetchOptions.headers != null && !(fetchOptions.headers instanceof Headers)) fetchOptions.headers = new Headers(fetchOptions.headers);
43
+ const response = await fetchFn(String(url), fetchOptions);
44
+ if (response.status < 400) return response;
45
+ const log = DefaultLogger("zeed:network");
46
+ try {
47
+ log.warn(`Fetch of ${String(url)} returned status=${response.status}. Options:`, fetchOptions);
48
+ log.warn(`Response: ${await response.text()}`);
49
+ } catch (err) {
50
+ log.error("Exception:", err);
51
+ }
52
+ } catch (err) {
53
+ DefaultLogger("zeed:network").error("fetchBasic", err);
54
+ }
55
+ }
56
+ /**
57
+ * Fetch and parse JSON.
58
+ * Returns the parsed JSON object or `undefined` on error.
59
+ * @category Network
60
+ */
61
+ async function fetchJson(url, fetchOptions = {}, fetchFn = fetch) {
62
+ try {
63
+ const res = await fetchBasic(url, [{
64
+ method: "GET",
65
+ headers: { Accept: "application/json" }
66
+ }, fetchOptions], fetchFn);
67
+ if (res) return jsonParse(await res.text());
68
+ } catch (err) {
69
+ DefaultLogger("zeed:network").error("fetchJSON error:", err);
70
+ }
71
+ }
72
+ /**
73
+ * Fetch text content.
74
+ * Returns the response text or `undefined` on error.
75
+ * @category Network
76
+ */
77
+ async function fetchText(url, fetchOptions = {}, fetchFn = fetch) {
78
+ try {
79
+ const res = await fetchBasic(url, [
80
+ defaultOptions,
81
+ { method: "GET" },
82
+ fetchOptions
83
+ ], fetchFn);
84
+ if (res) return await res.text();
85
+ } catch (err) {
86
+ DefaultLogger("zeed:network").error("fetchHTML error:", err);
87
+ }
88
+ }
89
+ /**
90
+ * Options for `fetchBasic` to send data as application/x-www-form-urlencoded.
91
+ * @category Network
92
+ */
93
+ function fetchOptionsFormURLEncoded(data, method = "POST") {
94
+ return {
95
+ method,
96
+ ...defaultOptions,
97
+ headers: { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8" },
98
+ body: encodeQuery(data)
99
+ };
100
+ }
101
+ /**
102
+ * Options for `fetchBasic` to send JSON data.
103
+ * @category Network
104
+ */
105
+ function fetchOptionsJson(data, method = "POST") {
106
+ return {
107
+ method,
108
+ ...defaultOptions,
109
+ headers: { "Content-Type": "application/json; charset=utf-8" },
110
+ body: jsonStringifySafe(data)
111
+ };
112
+ }
113
+ /**
114
+ * Create options to add Basic Authorization header using given username/password.
115
+ * @category Network
116
+ */
117
+ function fetchOptionsBasicAuth(username, password) {
118
+ return { headers: { Authorization: `Basic ${toBase64(`${username}:${password}`)}` } };
119
+ }
120
+
121
+ //#endregion
122
+ export { fetchBasic, fetchJson, fetchOptionsBasicAuth, fetchOptionsFormURLEncoded, fetchOptionsJson, fetchText, parseBasicAuth };
2
123
  //# sourceMappingURL=network.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"network.mjs","names":[],"sources":["../../src/common/network.ts"],"sourcesContent":["import type { Json } from './types'\nimport { arrayFlatten } from './data/array'\nimport { toBase64 } from './data/bin'\nimport { deepMerge } from './data/deep'\nimport { isArray } from './data/is'\nimport { jsonParse, jsonStringifySafe } from './data/json'\nimport { encodeQuery } from './data/url'\nimport { DefaultLogger } from './log/log'\n\n// TODO: Abort signal https://codedrivendevelopment.com/posts/everything-about-abort-signal-timeout\n\n/**\n * Options for fetch requests.\n * @category Network\n */\nexport interface fetchOptionType {\n /** Returns the cache mode associated with request, which is a string indicating how the request will interact with the browser's cache when fetching. */\n cache?: RequestCache\n /** Returns the credentials mode associated with request, which is a string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. */\n credentials?: RequestCredentials\n /** Returns the kind of resource requested by request, e.g., \"document\" or \"script\". */\n destination?: RequestDestination\n /** Returns a Headers object consisting of the headers associated with request. Note that headers added in the network layer by the user agent will not be accounted for in this object, e.g., the \"Host\" header. */\n headers?: Record<string, string>\n /** Returns request's subresource integrity metadata, which is a cryptographic hash of the resource being fetched. Its value consists of multiple hashes separated by whitespace. [SRI] */\n integrity?: string\n /** Returns a boolean indicating whether or not request can outlive the global in which it was created. */\n keepalive?: boolean\n /** Returns request's HTTP method, which is \"GET\" by default. */\n method?: string\n /** Returns the mode associated with request, which is a string indicating whether the request will use CORS, or will be restricted to same-origin URLs. */\n mode?: RequestMode\n /** Returns the redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default. */\n redirect?: RequestRedirect\n /** Returns the referrer of request. Its value can be a same-origin URL if explicitly set in init, the empty string to indicate no referrer, and \"about:client\" when defaulting to the global's default. This is used during fetching to determine the value of the `Referer` header of the request being made. */\n referrer?: string\n /** Returns the referrer policy associated with request. This is used during fetching to compute the value of the request's referrer. */\n referrerPolicy?: ReferrerPolicy\n /** Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler. */\n signal?: AbortSignal\n /** Returns the URL of request as a string. */\n url?: string\n body?: any\n}\n\n/**\n * Type for fetch options, can be a single option or an array of options.\n * @category Network\n */\nexport type fetchOptionsType = fetchOptionType | fetchOptionsType[]\n\nconst defaultOptions: fetchOptionType = {\n cache: 'no-cache',\n redirect: 'follow',\n headers: {},\n}\n\n// Source https://developer.mozilla.org/de/docs/Web/HTTP/Methods\nexport type httpMethod\n = | 'GET'\n | 'POST'\n | 'PUT'\n | 'DELETE'\n | 'HEAD'\n | 'CONNECT'\n | 'OPTIONS'\n | 'TRACE'\n | 'PATCH'\n\nexport function parseBasicAuth(url: string) {\n const m = /:\\/\\/([^@]*)@/.exec(url)\n if (m && m[1]) {\n const [username, password] = m[1].split(':', 2)\n return {\n url: url.replace(`${m[1]}@`, ''),\n username,\n password,\n }\n }\n}\n\n/**\n * Simplified `fetch` wrapper.\n * - Accepts a single fetch options object or an array of options which will be deep-merged.\n * - Supports basic auth embedded in the URL (e.g. https://user:pass@host/path).\n * - Normalizes headers to a `Headers` instance.\n * - Returns the `Response` when status < 400, otherwise returns `undefined`.\n * @category Network\n */\nexport async function fetchBasic(\n url: string | URL,\n fetchOptions: fetchOptionsType = {},\n fetchFn: (input: RequestInfo, init?: RequestInit) => Promise<Response> = fetch,\n): Promise<Response | undefined> {\n try {\n if (isArray(fetchOptions))\n fetchOptions = deepMerge({}, ...arrayFlatten(fetchOptions))\n\n const auth = parseBasicAuth(String(url))\n if (auth) {\n url = auth.url\n fetchOptions = deepMerge(\n {},\n fetchOptions,\n fetchOptionsBasicAuth(auth.username, auth.password),\n )\n }\n\n if (\n // @ts-expect-error headers\n fetchOptions.headers != null\n // @ts-expect-error headers\n && !(fetchOptions.headers instanceof Headers)\n ) {\n // @ts-expect-error headers\n fetchOptions.headers = new Headers(fetchOptions.headers)\n }\n\n // log(\"fetch\", url, fetchOptions)\n const response = await fetchFn(String(url), fetchOptions as RequestInit)\n\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\n if (response.status < 400)\n return response\n\n const log = DefaultLogger('zeed:network')\n\n try {\n log.warn(`Fetch of ${String(url)} returned status=${response.status}. Options:`, fetchOptions)\n log.warn(`Response: ${await response.text()}`)\n }\n catch (err) {\n log.error('Exception:', err)\n }\n }\n catch (err) {\n const log = DefaultLogger('zeed:network')\n log.error('fetchBasic', err)\n }\n}\n/**\n * Fetch and parse JSON.\n * Returns the parsed JSON object or `undefined` on error.\n * @category Network\n */\nexport async function fetchJson<T = Json>(\n url: string | URL,\n fetchOptions: fetchOptionsType = {},\n fetchFn: (input: RequestInfo, init?: RequestInit) => Promise<Response> = fetch,\n): Promise<T | undefined> {\n try {\n const res = await fetchBasic(\n url,\n [\n {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n },\n fetchOptions,\n ],\n fetchFn,\n )\n if (res)\n return jsonParse(await res.text())\n }\n catch (err) {\n const log = DefaultLogger('zeed:network')\n log.error('fetchJSON error:', err)\n }\n}\n/**\n * Fetch text content.\n * Returns the response text or `undefined` on error.\n * @category Network\n */\nexport async function fetchText(\n url: string | URL,\n fetchOptions: fetchOptionsType = {},\n fetchFn: (input: RequestInfo, init?: RequestInit) => Promise<Response> = fetch,\n): Promise<string | undefined> {\n try {\n const res = await fetchBasic(\n url,\n [defaultOptions, { method: 'GET' }, fetchOptions],\n fetchFn,\n )\n if (res)\n return await res.text()\n }\n catch (err) {\n const log = DefaultLogger('zeed:network')\n log.error('fetchHTML error:', err)\n }\n}\n\n///\n\n/**\n * Options for `fetchBasic` to send data as application/x-www-form-urlencoded.\n * @category Network\n */\nexport function fetchOptionsFormURLEncoded(\n data: object,\n method: httpMethod = 'POST',\n): fetchOptionType {\n return {\n method,\n ...defaultOptions,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n },\n body: encodeQuery(data),\n }\n}\n\n/**\n * Options for `fetchBasic` to send JSON data.\n * @category Network\n */\nexport function fetchOptionsJson(\n data: object,\n method: httpMethod = 'POST',\n): fetchOptionType {\n return {\n method,\n ...defaultOptions,\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n // Accept: \"application/json\",\n },\n body: jsonStringifySafe(data),\n }\n}\n\n/**\n * Create options to add Basic Authorization header using given username/password.\n * @category Network\n */\nexport function fetchOptionsBasicAuth(\n username: string,\n password: string,\n): fetchOptionType {\n return {\n headers: {\n Authorization: `Basic ${toBase64(`${username}:${password}`)}`,\n },\n }\n}\n"],"mappings":"0UAmDA,MAAM,EAAkC,CACtC,MAAO,WACP,SAAU,SACV,QAAS,EAAE,CACZ,CAcD,SAAgB,EAAe,EAAa,CAC1C,IAAM,EAAI,gBAAgB,KAAK,EAAI,CACnC,GAAI,GAAK,EAAE,GAAI,CACb,GAAM,CAAC,EAAU,GAAY,EAAE,GAAG,MAAM,IAAK,EAAE,CAC/C,MAAO,CACL,IAAK,EAAI,QAAQ,GAAG,EAAE,GAAG,GAAI,GAAG,CAChC,WACA,WACD,EAYL,eAAsB,EACpB,EACA,EAAiC,EAAE,CACnC,EAAyE,MAC1C,CAC/B,GAAI,CACE,EAAQ,EAAa,GACvB,EAAe,EAAU,EAAE,CAAE,GAAG,EAAa,EAAa,CAAC,EAE7D,IAAM,EAAO,EAAe,OAAO,EAAI,CAAC,CACpC,IACF,EAAM,EAAK,IACX,EAAe,EACb,EAAE,CACF,EACA,EAAsB,EAAK,SAAU,EAAK,SAAS,CACpD,EAKD,EAAa,SAAW,MAErB,EAAE,EAAa,mBAAmB,WAGrC,EAAa,QAAU,IAAI,QAAQ,EAAa,QAAQ,EAI1D,IAAM,EAAW,MAAM,EAAQ,OAAO,EAAI,CAAE,EAA4B,CAGxE,GAAI,EAAS,OAAS,IACpB,OAAO,EAET,IAAM,EAAM,EAAc,eAAe,CAEzC,GAAI,CACF,EAAI,KAAK,YAAY,OAAO,EAAI,CAAC,mBAAmB,EAAS,OAAO,YAAa,EAAa,CAC9F,EAAI,KAAK,aAAa,MAAM,EAAS,MAAM,GAAG,OAEzC,EAAK,CACV,EAAI,MAAM,aAAc,EAAI,QAGzB,EAAK,CACE,EAAc,eAAe,CACrC,MAAM,aAAc,EAAI,EAQhC,eAAsB,EACpB,EACA,EAAiC,EAAE,CACnC,EAAyE,MACjD,CACxB,GAAI,CACF,IAAM,EAAM,MAAM,EAChB,EACA,CACE,CACE,OAAQ,MACR,QAAS,CACP,OAAQ,mBACT,CACF,CACD,EACD,CACD,EACD,CACD,GAAI,EACF,OAAO,EAAU,MAAM,EAAI,MAAM,CAAC,OAE/B,EAAK,CACE,EAAc,eAAe,CACrC,MAAM,mBAAoB,EAAI,EAQtC,eAAsB,EACpB,EACA,EAAiC,EAAE,CACnC,EAAyE,MAC5C,CAC7B,GAAI,CACF,IAAM,EAAM,MAAM,EAChB,EACA,CAAC,EAAgB,CAAE,OAAQ,MAAO,CAAE,EAAa,CACjD,EACD,CACD,GAAI,EACF,OAAO,MAAM,EAAI,MAAM,OAEpB,EAAK,CACE,EAAc,eAAe,CACrC,MAAM,mBAAoB,EAAI,EAUtC,SAAgB,EACd,EACA,EAAqB,OACJ,CACjB,MAAO,CACL,SACA,GAAG,EACH,QAAS,CACP,eAAgB,mDACjB,CACD,KAAM,EAAY,EAAK,CACxB,CAOH,SAAgB,EACd,EACA,EAAqB,OACJ,CACjB,MAAO,CACL,SACA,GAAG,EACH,QAAS,CACP,eAAgB,kCAEjB,CACD,KAAM,EAAkB,EAAK,CAC9B,CAOH,SAAgB,EACd,EACA,EACiB,CACjB,MAAO,CACL,QAAS,CACP,cAAe,SAAS,EAAS,GAAG,EAAS,GAAG,IAAW,GAC5D,CACF"}
1
+ {"version":3,"file":"network.mjs","names":[],"sources":["../../src/common/network.ts"],"sourcesContent":["import type { Json } from './types'\nimport { arrayFlatten } from './data/array'\nimport { toBase64 } from './data/bin'\nimport { deepMerge } from './data/deep'\nimport { isArray } from './data/is'\nimport { jsonParse, jsonStringifySafe } from './data/json'\nimport { encodeQuery } from './data/url'\nimport { DefaultLogger } from './log/log'\n\n// TODO: Abort signal https://codedrivendevelopment.com/posts/everything-about-abort-signal-timeout\n\n/**\n * Options for fetch requests.\n * @category Network\n */\nexport interface fetchOptionType {\n /** Returns the cache mode associated with request, which is a string indicating how the request will interact with the browser's cache when fetching. */\n cache?: RequestCache\n /** Returns the credentials mode associated with request, which is a string indicating whether credentials will be sent with the request always, never, or only when sent to a same-origin URL. */\n credentials?: RequestCredentials\n /** Returns the kind of resource requested by request, e.g., \"document\" or \"script\". */\n destination?: RequestDestination\n /** Returns a Headers object consisting of the headers associated with request. Note that headers added in the network layer by the user agent will not be accounted for in this object, e.g., the \"Host\" header. */\n headers?: Record<string, string>\n /** Returns request's subresource integrity metadata, which is a cryptographic hash of the resource being fetched. Its value consists of multiple hashes separated by whitespace. [SRI] */\n integrity?: string\n /** Returns a boolean indicating whether or not request can outlive the global in which it was created. */\n keepalive?: boolean\n /** Returns request's HTTP method, which is \"GET\" by default. */\n method?: string\n /** Returns the mode associated with request, which is a string indicating whether the request will use CORS, or will be restricted to same-origin URLs. */\n mode?: RequestMode\n /** Returns the redirect mode associated with request, which is a string indicating how redirects for the request will be handled during fetching. A request will follow redirects by default. */\n redirect?: RequestRedirect\n /** Returns the referrer of request. Its value can be a same-origin URL if explicitly set in init, the empty string to indicate no referrer, and \"about:client\" when defaulting to the global's default. This is used during fetching to determine the value of the `Referer` header of the request being made. */\n referrer?: string\n /** Returns the referrer policy associated with request. This is used during fetching to compute the value of the request's referrer. */\n referrerPolicy?: ReferrerPolicy\n /** Returns the signal associated with request, which is an AbortSignal object indicating whether or not request has been aborted, and its abort event handler. */\n signal?: AbortSignal\n /** Returns the URL of request as a string. */\n url?: string\n body?: any\n}\n\n/**\n * Type for fetch options, can be a single option or an array of options.\n * @category Network\n */\nexport type fetchOptionsType = fetchOptionType | fetchOptionsType[]\n\nconst defaultOptions: fetchOptionType = {\n cache: 'no-cache',\n redirect: 'follow',\n headers: {},\n}\n\n// Source https://developer.mozilla.org/de/docs/Web/HTTP/Methods\nexport type httpMethod\n = | 'GET'\n | 'POST'\n | 'PUT'\n | 'DELETE'\n | 'HEAD'\n | 'CONNECT'\n | 'OPTIONS'\n | 'TRACE'\n | 'PATCH'\n\nexport function parseBasicAuth(url: string) {\n const m = /:\\/\\/([^@]*)@/.exec(url)\n if (m && m[1]) {\n const [username, password] = m[1].split(':', 2)\n return {\n url: url.replace(`${m[1]}@`, ''),\n username,\n password,\n }\n }\n}\n\n/**\n * Simplified `fetch` wrapper.\n * - Accepts a single fetch options object or an array of options which will be deep-merged.\n * - Supports basic auth embedded in the URL (e.g. https://user:pass@host/path).\n * - Normalizes headers to a `Headers` instance.\n * - Returns the `Response` when status < 400, otherwise returns `undefined`.\n * @category Network\n */\nexport async function fetchBasic(\n url: string | URL,\n fetchOptions: fetchOptionsType = {},\n fetchFn: (input: RequestInfo, init?: RequestInit) => Promise<Response> = fetch,\n): Promise<Response | undefined> {\n try {\n if (isArray(fetchOptions))\n fetchOptions = deepMerge({}, ...arrayFlatten(fetchOptions))\n\n const auth = parseBasicAuth(String(url))\n if (auth) {\n url = auth.url\n fetchOptions = deepMerge(\n {},\n fetchOptions,\n fetchOptionsBasicAuth(auth.username, auth.password),\n )\n }\n\n if (\n // @ts-expect-error headers\n fetchOptions.headers != null\n // @ts-expect-error headers\n && !(fetchOptions.headers instanceof Headers)\n ) {\n // @ts-expect-error headers\n fetchOptions.headers = new Headers(fetchOptions.headers)\n }\n\n // log(\"fetch\", url, fetchOptions)\n const response = await fetchFn(String(url), fetchOptions as RequestInit)\n\n // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status\n if (response.status < 400)\n return response\n\n const log = DefaultLogger('zeed:network')\n\n try {\n log.warn(`Fetch of ${String(url)} returned status=${response.status}. Options:`, fetchOptions)\n log.warn(`Response: ${await response.text()}`)\n }\n catch (err) {\n log.error('Exception:', err)\n }\n }\n catch (err) {\n const log = DefaultLogger('zeed:network')\n log.error('fetchBasic', err)\n }\n}\n/**\n * Fetch and parse JSON.\n * Returns the parsed JSON object or `undefined` on error.\n * @category Network\n */\nexport async function fetchJson<T = Json>(\n url: string | URL,\n fetchOptions: fetchOptionsType = {},\n fetchFn: (input: RequestInfo, init?: RequestInit) => Promise<Response> = fetch,\n): Promise<T | undefined> {\n try {\n const res = await fetchBasic(\n url,\n [\n {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n },\n fetchOptions,\n ],\n fetchFn,\n )\n if (res)\n return jsonParse(await res.text())\n }\n catch (err) {\n const log = DefaultLogger('zeed:network')\n log.error('fetchJSON error:', err)\n }\n}\n/**\n * Fetch text content.\n * Returns the response text or `undefined` on error.\n * @category Network\n */\nexport async function fetchText(\n url: string | URL,\n fetchOptions: fetchOptionsType = {},\n fetchFn: (input: RequestInfo, init?: RequestInit) => Promise<Response> = fetch,\n): Promise<string | undefined> {\n try {\n const res = await fetchBasic(\n url,\n [defaultOptions, { method: 'GET' }, fetchOptions],\n fetchFn,\n )\n if (res)\n return await res.text()\n }\n catch (err) {\n const log = DefaultLogger('zeed:network')\n log.error('fetchHTML error:', err)\n }\n}\n\n///\n\n/**\n * Options for `fetchBasic` to send data as application/x-www-form-urlencoded.\n * @category Network\n */\nexport function fetchOptionsFormURLEncoded(\n data: object,\n method: httpMethod = 'POST',\n): fetchOptionType {\n return {\n method,\n ...defaultOptions,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n },\n body: encodeQuery(data),\n }\n}\n\n/**\n * Options for `fetchBasic` to send JSON data.\n * @category Network\n */\nexport function fetchOptionsJson(\n data: object,\n method: httpMethod = 'POST',\n): fetchOptionType {\n return {\n method,\n ...defaultOptions,\n headers: {\n 'Content-Type': 'application/json; charset=utf-8',\n // Accept: \"application/json\",\n },\n body: jsonStringifySafe(data),\n }\n}\n\n/**\n * Create options to add Basic Authorization header using given username/password.\n * @category Network\n */\nexport function fetchOptionsBasicAuth(\n username: string,\n password: string,\n): fetchOptionType {\n return {\n headers: {\n Authorization: `Basic ${toBase64(`${username}:${password}`)}`,\n },\n }\n}\n"],"mappings":";;;;;;;;;AAmDA,MAAM,iBAAkC;CACtC,OAAO;CACP,UAAU;CACV,SAAS,EAAE;CACZ;AAcD,SAAgB,eAAe,KAAa;CAC1C,MAAM,IAAI,gBAAgB,KAAK,IAAI;AACnC,KAAI,KAAK,EAAE,IAAI;EACb,MAAM,CAAC,UAAU,YAAY,EAAE,GAAG,MAAM,KAAK,EAAE;AAC/C,SAAO;GACL,KAAK,IAAI,QAAQ,GAAG,EAAE,GAAG,IAAI,GAAG;GAChC;GACA;GACD;;;;;;;;;;;AAYL,eAAsB,WACpB,KACA,eAAiC,EAAE,EACnC,UAAyE,OAC1C;AAC/B,KAAI;AACF,MAAI,QAAQ,aAAa,CACvB,gBAAe,UAAU,EAAE,EAAE,GAAG,aAAa,aAAa,CAAC;EAE7D,MAAM,OAAO,eAAe,OAAO,IAAI,CAAC;AACxC,MAAI,MAAM;AACR,SAAM,KAAK;AACX,kBAAe,UACb,EAAE,EACF,cACA,sBAAsB,KAAK,UAAU,KAAK,SAAS,CACpD;;AAGH,MAEE,aAAa,WAAW,QAErB,EAAE,aAAa,mBAAmB,SAGrC,cAAa,UAAU,IAAI,QAAQ,aAAa,QAAQ;EAI1D,MAAM,WAAW,MAAM,QAAQ,OAAO,IAAI,EAAE,aAA4B;AAGxE,MAAI,SAAS,SAAS,IACpB,QAAO;EAET,MAAM,MAAM,cAAc,eAAe;AAEzC,MAAI;AACF,OAAI,KAAK,YAAY,OAAO,IAAI,CAAC,mBAAmB,SAAS,OAAO,aAAa,aAAa;AAC9F,OAAI,KAAK,aAAa,MAAM,SAAS,MAAM,GAAG;WAEzC,KAAK;AACV,OAAI,MAAM,cAAc,IAAI;;UAGzB,KAAK;AAEV,EADY,cAAc,eAAe,CACrC,MAAM,cAAc,IAAI;;;;;;;;AAQhC,eAAsB,UACpB,KACA,eAAiC,EAAE,EACnC,UAAyE,OACjD;AACxB,KAAI;EACF,MAAM,MAAM,MAAM,WAChB,KACA,CACE;GACE,QAAQ;GACR,SAAS,EACP,QAAQ,oBACT;GACF,EACD,aACD,EACD,QACD;AACD,MAAI,IACF,QAAO,UAAU,MAAM,IAAI,MAAM,CAAC;UAE/B,KAAK;AAEV,EADY,cAAc,eAAe,CACrC,MAAM,oBAAoB,IAAI;;;;;;;;AAQtC,eAAsB,UACpB,KACA,eAAiC,EAAE,EACnC,UAAyE,OAC5C;AAC7B,KAAI;EACF,MAAM,MAAM,MAAM,WAChB,KACA;GAAC;GAAgB,EAAE,QAAQ,OAAO;GAAE;GAAa,EACjD,QACD;AACD,MAAI,IACF,QAAO,MAAM,IAAI,MAAM;UAEpB,KAAK;AAEV,EADY,cAAc,eAAe,CACrC,MAAM,oBAAoB,IAAI;;;;;;;AAUtC,SAAgB,2BACd,MACA,SAAqB,QACJ;AACjB,QAAO;EACL;EACA,GAAG;EACH,SAAS,EACP,gBAAgB,oDACjB;EACD,MAAM,YAAY,KAAK;EACxB;;;;;;AAOH,SAAgB,iBACd,MACA,SAAqB,QACJ;AACjB,QAAO;EACL;EACA,GAAG;EACH,SAAS,EACP,gBAAgB,mCAEjB;EACD,MAAM,kBAAkB,KAAK;EAC9B;;;;;;AAOH,SAAgB,sBACd,UACA,UACiB;AACjB,QAAO,EACL,SAAS,EACP,eAAe,SAAS,SAAS,GAAG,SAAS,GAAG,WAAW,IAC5D,EACF"}
@@ -1,2 +1,93 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(){if(typeof localStorage<`u`)return localStorage}function t(){if(typeof window<`u`)return window}function n(){if(typeof navigator<`u`)return navigator}function r(){return t()??typeof WorkerGlobalScope<`u`?self:typeof global<`u`?global:Function(`return this;`)()}function i(e={ios:!1,macos:!1,windows:!1,beaker:!1,electron:!1,wkwebview:!1,pwa:!1,pwaInstalled:!1,browser:!1,node:!1,worker:!1,test:!1,jest:!1,macosNative:!1,iosNative:!1,appleNative:!1,touch:!1}){let r=n(),i=t();return e.ios=r?.platform?.match(/(iPhone|iPod|iPad)/i)!=null,e.macos=!!r?.platform?.startsWith(`Mac`),e.windows=!!r?.platform?.startsWith(`Win`),e.beaker=i?.beaker!=null,e.electron=(r?.userAgent?.toLowerCase()?.indexOf(` electron/`)||-1)>-1&&!e.beaker,e.wkwebview=i?.webkit?.messageHandlers!=null,e.pwa=r?.serviceWorker!=null,e.pwaInstalled=r?.standalone||i?.matchMedia?.(`(display-mode: standalone)`)?.matches,e.node=typeof process<`u`&&process?.release?.name===`node`,e.browser=!e.electron&&!e.wkwebview&&!e.node,e.worker=typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope,e.jest=typeof jest<`u`||typeof vitest<`u`,e.test=e.jest,e.macosNative=e.wkwebview&&e.macos,e.iosNative=e.wkwebview&&e.ios,e.appleNative=e.wkwebview,e.touch=i&&`ontouchstart`in i||(r?.maxTouchPoints||0)>1||r?.msPointerEnabled&&i?.MSGesture||i?.DocumentTouch&&document instanceof DocumentTouch,e}function a(){return typeof window<`u`&&globalThis===window}function o(e){a()?window.addEventListener(`beforeunload`,e):typeof process<`u`&&process.on(`exit`,()=>e)}exports.detect=i,exports.getGlobal=r,exports.getLocalStorage=e,exports.getNavigator=n,exports.getWindow=t,exports.isBrowser=a,exports.useExitHandler=o;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ //#region src/common/platform.ts
4
+ /**
5
+ * Retrieves the global `localStorage` object.
6
+ * @returns The global `localStorage` object if available, otherwise `undefined`.
7
+ */
8
+ function getLocalStorage() {
9
+ if (typeof localStorage !== "undefined") return localStorage;
10
+ }
11
+ /**
12
+ * Retrieves the global `window` object.
13
+ * @returns The global `window` object if available, otherwise `undefined`.
14
+ */
15
+ function getWindow() {
16
+ if (typeof window !== "undefined") return window;
17
+ }
18
+ /**
19
+ * Retrieves the navigator object if it is available.
20
+ * @returns The navigator object if available, otherwise undefined.
21
+ */
22
+ function getNavigator() {
23
+ if (typeof navigator !== "undefined") return navigator;
24
+ }
25
+ /**
26
+ * Retrieves the global object in the current environment.
27
+ * @returns The global object.
28
+ */
29
+ function getGlobal() {
30
+ return getWindow() ?? typeof WorkerGlobalScope !== "undefined" ? self : typeof global !== "undefined" ? global : new Function("return this;")();
31
+ }
32
+ /** @deprecated */
33
+ function detect(info = {
34
+ ios: false,
35
+ macos: false,
36
+ windows: false,
37
+ beaker: false,
38
+ electron: false,
39
+ wkwebview: false,
40
+ pwa: false,
41
+ pwaInstalled: false,
42
+ browser: false,
43
+ node: false,
44
+ worker: false,
45
+ test: false,
46
+ jest: false,
47
+ macosNative: false,
48
+ iosNative: false,
49
+ appleNative: false,
50
+ touch: false
51
+ }) {
52
+ const _navigator = getNavigator();
53
+ const _window = getWindow();
54
+ info.ios = _navigator?.platform?.match(/(iPhone|iPod|iPad)/i) != null;
55
+ info.macos = !!_navigator?.platform?.startsWith("Mac");
56
+ info.windows = !!_navigator?.platform?.startsWith("Win");
57
+ info.beaker = _window?.beaker != null;
58
+ info.electron = (_navigator?.userAgent?.toLowerCase()?.indexOf(" electron/") || -1) > -1 && !info.beaker;
59
+ info.wkwebview = _window?.webkit?.messageHandlers != null;
60
+ info.pwa = _navigator?.serviceWorker != null;
61
+ info.pwaInstalled = _navigator?.standalone || _window?.matchMedia?.("(display-mode: standalone)")?.matches;
62
+ info.node = typeof process !== "undefined" && process?.release?.name === "node";
63
+ info.browser = !info.electron && !info.wkwebview && !info.node;
64
+ info.worker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope;
65
+ info.jest = typeof jest !== "undefined" || typeof vitest !== "undefined";
66
+ info.test = info.jest;
67
+ info.macosNative = info.wkwebview && info.macos;
68
+ info.iosNative = info.wkwebview && info.ios;
69
+ info.appleNative = info.wkwebview;
70
+ info.touch = _window && "ontouchstart" in _window || (_navigator?.maxTouchPoints || 0) > 1 || _navigator?.msPointerEnabled && _window?.MSGesture || _window?.DocumentTouch && document instanceof DocumentTouch;
71
+ return info;
72
+ }
73
+ function isBrowser() {
74
+ return typeof window !== "undefined" && globalThis === window;
75
+ }
76
+ /**
77
+ * Before closing the tab/window or quitting the node process
78
+ * allow to do something important first
79
+ */
80
+ function useExitHandler(handler) {
81
+ if (isBrowser()) window.addEventListener("beforeunload", handler);
82
+ else if (typeof process !== "undefined") process.on("exit", () => handler);
83
+ }
84
+
85
+ //#endregion
86
+ exports.detect = detect;
87
+ exports.getGlobal = getGlobal;
88
+ exports.getLocalStorage = getLocalStorage;
89
+ exports.getNavigator = getNavigator;
90
+ exports.getWindow = getWindow;
91
+ exports.isBrowser = isBrowser;
92
+ exports.useExitHandler = useExitHandler;
2
93
  //# sourceMappingURL=platform.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.cjs","names":[],"sources":["../../src/common/platform.ts"],"sourcesContent":["/* eslint-disable no-restricted-globals */\n/* eslint-disable node/prefer-global/process */\n\n/**\n * Retrieves the global `localStorage` object.\n * @returns The global `localStorage` object if available, otherwise `undefined`.\n */\nexport function getLocalStorage(): any | undefined {\n if (typeof localStorage !== 'undefined')\n return localStorage\n}\n\n/**\n * Retrieves the global `window` object.\n * @returns The global `window` object if available, otherwise `undefined`.\n */\nexport function getWindow(): any | undefined {\n if (typeof window !== 'undefined')\n return window\n}\n\n/**\n * Retrieves the navigator object if it is available.\n * @returns The navigator object if available, otherwise undefined.\n */\nexport function getNavigator(): any | undefined {\n if (typeof navigator !== 'undefined')\n return navigator\n}\n\n/**\n * Retrieves the global object in the current environment.\n * @returns The global object.\n */\nexport function getGlobal(): any {\n return getWindow()\n // @ts-expect-error xxx\n ?? typeof WorkerGlobalScope !== 'undefined'\n ? self\n : typeof global !== 'undefined'\n ? global\n // eslint-disable-next-line no-new-func\n : new Function('return this;')()\n}\n\n/** @deprecated */\nexport function detect(\n info = {\n ios: false,\n macos: false,\n windows: false,\n beaker: false,\n electron: false,\n wkwebview: false,\n pwa: false,\n pwaInstalled: false,\n browser: false,\n node: false,\n worker: false,\n test: false,\n jest: false,\n macosNative: false,\n iosNative: false,\n appleNative: false,\n touch: false,\n },\n) {\n const _navigator = getNavigator()\n const _window = getWindow()\n\n info.ios = _navigator?.platform?.match(/(iPhone|iPod|iPad)/i) != null\n info.macos = !!_navigator?.platform?.startsWith('Mac')\n info.windows = !!_navigator?.platform?.startsWith('Win')\n\n info.beaker = _window?.beaker != null // https://github.com/beakerbrowser/beaker\n info.electron = (_navigator?.userAgent?.toLowerCase()?.indexOf(' electron/') || -1) > -1 && !info.beaker\n info.wkwebview = _window?.webkit?.messageHandlers != null // Apple embedded\n\n info.pwa = _navigator?.serviceWorker != null\n\n info.pwaInstalled = _navigator?.standalone || _window?.matchMedia?.('(display-mode: standalone)')?.matches\n\n info.node = typeof process !== 'undefined' && process?.release?.name === 'node'\n info.browser = !info.electron && !info.wkwebview && !info.node\n\n // info.worker = typeof importScripts === 'function'\n // @ts-expect-error xxx\n info.worker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope\n // @ts-expect-error xxx\n\n info.jest = typeof jest !== 'undefined' || typeof vitest !== 'undefined' // || globalThis.__vitest_browser_runner__ != null || globalThis.__vitest_ui_api__ != null\n info.test = info.jest\n\n info.macosNative = info.wkwebview && info.macos\n info.iosNative = info.wkwebview && info.ios\n info.appleNative = info.wkwebview\n\n // https://github.com/viljamis/feature.js/blob/master/feature.js#L203\n // @ts-expect-error xxx\n info.touch = (_window && 'ontouchstart' in _window) || (_navigator?.maxTouchPoints || 0) > 1 || (_navigator?.msPointerEnabled && _window?.MSGesture) || (_window?.DocumentTouch && document instanceof DocumentTouch)\n\n return info\n}\n\nexport function isBrowser() {\n return typeof window !== 'undefined' && globalThis === window\n}\n\n/**\n * Before closing the tab/window or quitting the node process\n * allow to do something important first\n */\nexport function useExitHandler(handler: () => void) {\n if (isBrowser())\n window.addEventListener('beforeunload', handler)\n else if (typeof process !== 'undefined')\n process.on('exit', () => handler)\n}\n"],"mappings":"mEAOA,SAAgB,GAAmC,CACjD,GAAI,OAAO,aAAiB,IAC1B,OAAO,aAOX,SAAgB,GAA6B,CAC3C,GAAI,OAAO,OAAW,IACpB,OAAO,OAOX,SAAgB,GAAgC,CAC9C,GAAI,OAAO,UAAc,IACvB,OAAO,UAOX,SAAgB,GAAiB,CAC/B,OAAO,GAAW,EAEb,OAAO,kBAAsB,IAC9B,KACA,OAAO,OAAW,IAChB,OAEI,SAAS,eAAe,EAAE,CAItC,SAAgB,EACd,EAAO,CACL,IAAK,GACL,MAAO,GACP,QAAS,GACT,OAAQ,GACR,SAAU,GACV,UAAW,GACX,IAAK,GACL,aAAc,GACd,QAAS,GACT,KAAM,GACN,OAAQ,GACR,KAAM,GACN,KAAM,GACN,YAAa,GACb,UAAW,GACX,YAAa,GACb,MAAO,GACR,CACD,CACA,IAAM,EAAa,GAAc,CAC3B,EAAU,GAAW,CAiC3B,MA/BA,GAAK,IAAM,GAAY,UAAU,MAAM,sBAAsB,EAAI,KACjE,EAAK,MAAQ,CAAC,CAAC,GAAY,UAAU,WAAW,MAAM,CACtD,EAAK,QAAU,CAAC,CAAC,GAAY,UAAU,WAAW,MAAM,CAExD,EAAK,OAAS,GAAS,QAAU,KACjC,EAAK,UAAY,GAAY,WAAW,aAAa,EAAE,QAAQ,aAAa,EAAI,IAAM,IAAM,CAAC,EAAK,OAClG,EAAK,UAAY,GAAS,QAAQ,iBAAmB,KAErD,EAAK,IAAM,GAAY,eAAiB,KAExC,EAAK,aAAe,GAAY,YAAc,GAAS,aAAa,6BAA6B,EAAE,QAEnG,EAAK,KAAO,OAAO,QAAY,KAAe,SAAS,SAAS,OAAS,OACzE,EAAK,QAAU,CAAC,EAAK,UAAY,CAAC,EAAK,WAAa,CAAC,EAAK,KAI1D,EAAK,OAAS,OAAO,kBAAsB,KAAe,gBAAgB,kBAG1E,EAAK,KAAO,OAAO,KAAS,KAAe,OAAO,OAAW,IAC7D,EAAK,KAAO,EAAK,KAEjB,EAAK,YAAc,EAAK,WAAa,EAAK,MAC1C,EAAK,UAAY,EAAK,WAAa,EAAK,IACxC,EAAK,YAAc,EAAK,UAIxB,EAAK,MAAS,GAAW,iBAAkB,IAAa,GAAY,gBAAkB,GAAK,GAAM,GAAY,kBAAoB,GAAS,WAAe,GAAS,eAAiB,oBAAoB,cAEhM,EAGT,SAAgB,GAAY,CAC1B,OAAO,OAAO,OAAW,KAAe,aAAe,OAOzD,SAAgB,EAAe,EAAqB,CAC9C,GAAW,CACb,OAAO,iBAAiB,eAAgB,EAAQ,CACzC,OAAO,QAAY,KAC1B,QAAQ,GAAG,WAAc,EAAQ"}
1
+ {"version":3,"file":"platform.cjs","names":[],"sources":["../../src/common/platform.ts"],"sourcesContent":["/* eslint-disable no-restricted-globals */\n/* eslint-disable node/prefer-global/process */\n\n/**\n * Retrieves the global `localStorage` object.\n * @returns The global `localStorage` object if available, otherwise `undefined`.\n */\nexport function getLocalStorage(): any | undefined {\n if (typeof localStorage !== 'undefined')\n return localStorage\n}\n\n/**\n * Retrieves the global `window` object.\n * @returns The global `window` object if available, otherwise `undefined`.\n */\nexport function getWindow(): any | undefined {\n if (typeof window !== 'undefined')\n return window\n}\n\n/**\n * Retrieves the navigator object if it is available.\n * @returns The navigator object if available, otherwise undefined.\n */\nexport function getNavigator(): any | undefined {\n if (typeof navigator !== 'undefined')\n return navigator\n}\n\n/**\n * Retrieves the global object in the current environment.\n * @returns The global object.\n */\nexport function getGlobal(): any {\n return getWindow()\n // @ts-expect-error xxx\n ?? typeof WorkerGlobalScope !== 'undefined'\n ? self\n : typeof global !== 'undefined'\n ? global\n // eslint-disable-next-line no-new-func\n : new Function('return this;')()\n}\n\n/** @deprecated */\nexport function detect(\n info = {\n ios: false,\n macos: false,\n windows: false,\n beaker: false,\n electron: false,\n wkwebview: false,\n pwa: false,\n pwaInstalled: false,\n browser: false,\n node: false,\n worker: false,\n test: false,\n jest: false,\n macosNative: false,\n iosNative: false,\n appleNative: false,\n touch: false,\n },\n) {\n const _navigator = getNavigator()\n const _window = getWindow()\n\n info.ios = _navigator?.platform?.match(/(iPhone|iPod|iPad)/i) != null\n info.macos = !!_navigator?.platform?.startsWith('Mac')\n info.windows = !!_navigator?.platform?.startsWith('Win')\n\n info.beaker = _window?.beaker != null // https://github.com/beakerbrowser/beaker\n info.electron = (_navigator?.userAgent?.toLowerCase()?.indexOf(' electron/') || -1) > -1 && !info.beaker\n info.wkwebview = _window?.webkit?.messageHandlers != null // Apple embedded\n\n info.pwa = _navigator?.serviceWorker != null\n\n info.pwaInstalled = _navigator?.standalone || _window?.matchMedia?.('(display-mode: standalone)')?.matches\n\n info.node = typeof process !== 'undefined' && process?.release?.name === 'node'\n info.browser = !info.electron && !info.wkwebview && !info.node\n\n // info.worker = typeof importScripts === 'function'\n // @ts-expect-error xxx\n info.worker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope\n // @ts-expect-error xxx\n\n info.jest = typeof jest !== 'undefined' || typeof vitest !== 'undefined' // || globalThis.__vitest_browser_runner__ != null || globalThis.__vitest_ui_api__ != null\n info.test = info.jest\n\n info.macosNative = info.wkwebview && info.macos\n info.iosNative = info.wkwebview && info.ios\n info.appleNative = info.wkwebview\n\n // https://github.com/viljamis/feature.js/blob/master/feature.js#L203\n // @ts-expect-error xxx\n info.touch = (_window && 'ontouchstart' in _window) || (_navigator?.maxTouchPoints || 0) > 1 || (_navigator?.msPointerEnabled && _window?.MSGesture) || (_window?.DocumentTouch && document instanceof DocumentTouch)\n\n return info\n}\n\nexport function isBrowser() {\n return typeof window !== 'undefined' && globalThis === window\n}\n\n/**\n * Before closing the tab/window or quitting the node process\n * allow to do something important first\n */\nexport function useExitHandler(handler: () => void) {\n if (isBrowser())\n window.addEventListener('beforeunload', handler)\n else if (typeof process !== 'undefined')\n process.on('exit', () => handler)\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,kBAAmC;AACjD,KAAI,OAAO,iBAAiB,YAC1B,QAAO;;;;;;AAOX,SAAgB,YAA6B;AAC3C,KAAI,OAAO,WAAW,YACpB,QAAO;;;;;;AAOX,SAAgB,eAAgC;AAC9C,KAAI,OAAO,cAAc,YACvB,QAAO;;;;;;AAOX,SAAgB,YAAiB;AAC/B,QAAO,WAAW,IAEb,OAAO,sBAAsB,cAC9B,OACA,OAAO,WAAW,cAChB,SAEA,IAAI,SAAS,eAAe,EAAE;;;AAItC,SAAgB,OACd,OAAO;CACL,KAAK;CACL,OAAO;CACP,SAAS;CACT,QAAQ;CACR,UAAU;CACV,WAAW;CACX,KAAK;CACL,cAAc;CACd,SAAS;CACT,MAAM;CACN,QAAQ;CACR,MAAM;CACN,MAAM;CACN,aAAa;CACb,WAAW;CACX,aAAa;CACb,OAAO;CACR,EACD;CACA,MAAM,aAAa,cAAc;CACjC,MAAM,UAAU,WAAW;AAE3B,MAAK,MAAM,YAAY,UAAU,MAAM,sBAAsB,IAAI;AACjE,MAAK,QAAQ,CAAC,CAAC,YAAY,UAAU,WAAW,MAAM;AACtD,MAAK,UAAU,CAAC,CAAC,YAAY,UAAU,WAAW,MAAM;AAExD,MAAK,SAAS,SAAS,UAAU;AACjC,MAAK,YAAY,YAAY,WAAW,aAAa,EAAE,QAAQ,aAAa,IAAI,MAAM,MAAM,CAAC,KAAK;AAClG,MAAK,YAAY,SAAS,QAAQ,mBAAmB;AAErD,MAAK,MAAM,YAAY,iBAAiB;AAExC,MAAK,eAAe,YAAY,cAAc,SAAS,aAAa,6BAA6B,EAAE;AAEnG,MAAK,OAAO,OAAO,YAAY,eAAe,SAAS,SAAS,SAAS;AACzE,MAAK,UAAU,CAAC,KAAK,YAAY,CAAC,KAAK,aAAa,CAAC,KAAK;AAI1D,MAAK,SAAS,OAAO,sBAAsB,eAAe,gBAAgB;AAG1E,MAAK,OAAO,OAAO,SAAS,eAAe,OAAO,WAAW;AAC7D,MAAK,OAAO,KAAK;AAEjB,MAAK,cAAc,KAAK,aAAa,KAAK;AAC1C,MAAK,YAAY,KAAK,aAAa,KAAK;AACxC,MAAK,cAAc,KAAK;AAIxB,MAAK,QAAS,WAAW,kBAAkB,YAAa,YAAY,kBAAkB,KAAK,KAAM,YAAY,oBAAoB,SAAS,aAAe,SAAS,iBAAiB,oBAAoB;AAEvM,QAAO;;AAGT,SAAgB,YAAY;AAC1B,QAAO,OAAO,WAAW,eAAe,eAAe;;;;;;AAOzD,SAAgB,eAAe,SAAqB;AAClD,KAAI,WAAW,CACb,QAAO,iBAAiB,gBAAgB,QAAQ;UACzC,OAAO,YAAY,YAC1B,SAAQ,GAAG,cAAc,QAAQ"}
@@ -1,2 +1,85 @@
1
- function e(){if(typeof localStorage<`u`)return localStorage}function t(){if(typeof window<`u`)return window}function n(){if(typeof navigator<`u`)return navigator}function r(){return t()??typeof WorkerGlobalScope<`u`?self:typeof global<`u`?global:Function(`return this;`)()}function i(e={ios:!1,macos:!1,windows:!1,beaker:!1,electron:!1,wkwebview:!1,pwa:!1,pwaInstalled:!1,browser:!1,node:!1,worker:!1,test:!1,jest:!1,macosNative:!1,iosNative:!1,appleNative:!1,touch:!1}){let r=n(),i=t();return e.ios=r?.platform?.match(/(iPhone|iPod|iPad)/i)!=null,e.macos=!!r?.platform?.startsWith(`Mac`),e.windows=!!r?.platform?.startsWith(`Win`),e.beaker=i?.beaker!=null,e.electron=(r?.userAgent?.toLowerCase()?.indexOf(` electron/`)||-1)>-1&&!e.beaker,e.wkwebview=i?.webkit?.messageHandlers!=null,e.pwa=r?.serviceWorker!=null,e.pwaInstalled=r?.standalone||i?.matchMedia?.(`(display-mode: standalone)`)?.matches,e.node=typeof process<`u`&&process?.release?.name===`node`,e.browser=!e.electron&&!e.wkwebview&&!e.node,e.worker=typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope,e.jest=typeof jest<`u`||typeof vitest<`u`,e.test=e.jest,e.macosNative=e.wkwebview&&e.macos,e.iosNative=e.wkwebview&&e.ios,e.appleNative=e.wkwebview,e.touch=i&&`ontouchstart`in i||(r?.maxTouchPoints||0)>1||r?.msPointerEnabled&&i?.MSGesture||i?.DocumentTouch&&document instanceof DocumentTouch,e}function a(){return typeof window<`u`&&globalThis===window}function o(e){a()?window.addEventListener(`beforeunload`,e):typeof process<`u`&&process.on(`exit`,()=>e)}export{i as detect,r as getGlobal,e as getLocalStorage,n as getNavigator,t as getWindow,a as isBrowser,o as useExitHandler};
1
+ //#region src/common/platform.ts
2
+ /**
3
+ * Retrieves the global `localStorage` object.
4
+ * @returns The global `localStorage` object if available, otherwise `undefined`.
5
+ */
6
+ function getLocalStorage() {
7
+ if (typeof localStorage !== "undefined") return localStorage;
8
+ }
9
+ /**
10
+ * Retrieves the global `window` object.
11
+ * @returns The global `window` object if available, otherwise `undefined`.
12
+ */
13
+ function getWindow() {
14
+ if (typeof window !== "undefined") return window;
15
+ }
16
+ /**
17
+ * Retrieves the navigator object if it is available.
18
+ * @returns The navigator object if available, otherwise undefined.
19
+ */
20
+ function getNavigator() {
21
+ if (typeof navigator !== "undefined") return navigator;
22
+ }
23
+ /**
24
+ * Retrieves the global object in the current environment.
25
+ * @returns The global object.
26
+ */
27
+ function getGlobal() {
28
+ return getWindow() ?? typeof WorkerGlobalScope !== "undefined" ? self : typeof global !== "undefined" ? global : new Function("return this;")();
29
+ }
30
+ /** @deprecated */
31
+ function detect(info = {
32
+ ios: false,
33
+ macos: false,
34
+ windows: false,
35
+ beaker: false,
36
+ electron: false,
37
+ wkwebview: false,
38
+ pwa: false,
39
+ pwaInstalled: false,
40
+ browser: false,
41
+ node: false,
42
+ worker: false,
43
+ test: false,
44
+ jest: false,
45
+ macosNative: false,
46
+ iosNative: false,
47
+ appleNative: false,
48
+ touch: false
49
+ }) {
50
+ const _navigator = getNavigator();
51
+ const _window = getWindow();
52
+ info.ios = _navigator?.platform?.match(/(iPhone|iPod|iPad)/i) != null;
53
+ info.macos = !!_navigator?.platform?.startsWith("Mac");
54
+ info.windows = !!_navigator?.platform?.startsWith("Win");
55
+ info.beaker = _window?.beaker != null;
56
+ info.electron = (_navigator?.userAgent?.toLowerCase()?.indexOf(" electron/") || -1) > -1 && !info.beaker;
57
+ info.wkwebview = _window?.webkit?.messageHandlers != null;
58
+ info.pwa = _navigator?.serviceWorker != null;
59
+ info.pwaInstalled = _navigator?.standalone || _window?.matchMedia?.("(display-mode: standalone)")?.matches;
60
+ info.node = typeof process !== "undefined" && process?.release?.name === "node";
61
+ info.browser = !info.electron && !info.wkwebview && !info.node;
62
+ info.worker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope;
63
+ info.jest = typeof jest !== "undefined" || typeof vitest !== "undefined";
64
+ info.test = info.jest;
65
+ info.macosNative = info.wkwebview && info.macos;
66
+ info.iosNative = info.wkwebview && info.ios;
67
+ info.appleNative = info.wkwebview;
68
+ info.touch = _window && "ontouchstart" in _window || (_navigator?.maxTouchPoints || 0) > 1 || _navigator?.msPointerEnabled && _window?.MSGesture || _window?.DocumentTouch && document instanceof DocumentTouch;
69
+ return info;
70
+ }
71
+ function isBrowser() {
72
+ return typeof window !== "undefined" && globalThis === window;
73
+ }
74
+ /**
75
+ * Before closing the tab/window or quitting the node process
76
+ * allow to do something important first
77
+ */
78
+ function useExitHandler(handler) {
79
+ if (isBrowser()) window.addEventListener("beforeunload", handler);
80
+ else if (typeof process !== "undefined") process.on("exit", () => handler);
81
+ }
82
+
83
+ //#endregion
84
+ export { detect, getGlobal, getLocalStorage, getNavigator, getWindow, isBrowser, useExitHandler };
2
85
  //# sourceMappingURL=platform.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.mjs","names":[],"sources":["../../src/common/platform.ts"],"sourcesContent":["/* eslint-disable no-restricted-globals */\n/* eslint-disable node/prefer-global/process */\n\n/**\n * Retrieves the global `localStorage` object.\n * @returns The global `localStorage` object if available, otherwise `undefined`.\n */\nexport function getLocalStorage(): any | undefined {\n if (typeof localStorage !== 'undefined')\n return localStorage\n}\n\n/**\n * Retrieves the global `window` object.\n * @returns The global `window` object if available, otherwise `undefined`.\n */\nexport function getWindow(): any | undefined {\n if (typeof window !== 'undefined')\n return window\n}\n\n/**\n * Retrieves the navigator object if it is available.\n * @returns The navigator object if available, otherwise undefined.\n */\nexport function getNavigator(): any | undefined {\n if (typeof navigator !== 'undefined')\n return navigator\n}\n\n/**\n * Retrieves the global object in the current environment.\n * @returns The global object.\n */\nexport function getGlobal(): any {\n return getWindow()\n // @ts-expect-error xxx\n ?? typeof WorkerGlobalScope !== 'undefined'\n ? self\n : typeof global !== 'undefined'\n ? global\n // eslint-disable-next-line no-new-func\n : new Function('return this;')()\n}\n\n/** @deprecated */\nexport function detect(\n info = {\n ios: false,\n macos: false,\n windows: false,\n beaker: false,\n electron: false,\n wkwebview: false,\n pwa: false,\n pwaInstalled: false,\n browser: false,\n node: false,\n worker: false,\n test: false,\n jest: false,\n macosNative: false,\n iosNative: false,\n appleNative: false,\n touch: false,\n },\n) {\n const _navigator = getNavigator()\n const _window = getWindow()\n\n info.ios = _navigator?.platform?.match(/(iPhone|iPod|iPad)/i) != null\n info.macos = !!_navigator?.platform?.startsWith('Mac')\n info.windows = !!_navigator?.platform?.startsWith('Win')\n\n info.beaker = _window?.beaker != null // https://github.com/beakerbrowser/beaker\n info.electron = (_navigator?.userAgent?.toLowerCase()?.indexOf(' electron/') || -1) > -1 && !info.beaker\n info.wkwebview = _window?.webkit?.messageHandlers != null // Apple embedded\n\n info.pwa = _navigator?.serviceWorker != null\n\n info.pwaInstalled = _navigator?.standalone || _window?.matchMedia?.('(display-mode: standalone)')?.matches\n\n info.node = typeof process !== 'undefined' && process?.release?.name === 'node'\n info.browser = !info.electron && !info.wkwebview && !info.node\n\n // info.worker = typeof importScripts === 'function'\n // @ts-expect-error xxx\n info.worker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope\n // @ts-expect-error xxx\n\n info.jest = typeof jest !== 'undefined' || typeof vitest !== 'undefined' // || globalThis.__vitest_browser_runner__ != null || globalThis.__vitest_ui_api__ != null\n info.test = info.jest\n\n info.macosNative = info.wkwebview && info.macos\n info.iosNative = info.wkwebview && info.ios\n info.appleNative = info.wkwebview\n\n // https://github.com/viljamis/feature.js/blob/master/feature.js#L203\n // @ts-expect-error xxx\n info.touch = (_window && 'ontouchstart' in _window) || (_navigator?.maxTouchPoints || 0) > 1 || (_navigator?.msPointerEnabled && _window?.MSGesture) || (_window?.DocumentTouch && document instanceof DocumentTouch)\n\n return info\n}\n\nexport function isBrowser() {\n return typeof window !== 'undefined' && globalThis === window\n}\n\n/**\n * Before closing the tab/window or quitting the node process\n * allow to do something important first\n */\nexport function useExitHandler(handler: () => void) {\n if (isBrowser())\n window.addEventListener('beforeunload', handler)\n else if (typeof process !== 'undefined')\n process.on('exit', () => handler)\n}\n"],"mappings":"AAOA,SAAgB,GAAmC,CACjD,GAAI,OAAO,aAAiB,IAC1B,OAAO,aAOX,SAAgB,GAA6B,CAC3C,GAAI,OAAO,OAAW,IACpB,OAAO,OAOX,SAAgB,GAAgC,CAC9C,GAAI,OAAO,UAAc,IACvB,OAAO,UAOX,SAAgB,GAAiB,CAC/B,OAAO,GAAW,EAEb,OAAO,kBAAsB,IAC9B,KACA,OAAO,OAAW,IAChB,OAEI,SAAS,eAAe,EAAE,CAItC,SAAgB,EACd,EAAO,CACL,IAAK,GACL,MAAO,GACP,QAAS,GACT,OAAQ,GACR,SAAU,GACV,UAAW,GACX,IAAK,GACL,aAAc,GACd,QAAS,GACT,KAAM,GACN,OAAQ,GACR,KAAM,GACN,KAAM,GACN,YAAa,GACb,UAAW,GACX,YAAa,GACb,MAAO,GACR,CACD,CACA,IAAM,EAAa,GAAc,CAC3B,EAAU,GAAW,CAiC3B,MA/BA,GAAK,IAAM,GAAY,UAAU,MAAM,sBAAsB,EAAI,KACjE,EAAK,MAAQ,CAAC,CAAC,GAAY,UAAU,WAAW,MAAM,CACtD,EAAK,QAAU,CAAC,CAAC,GAAY,UAAU,WAAW,MAAM,CAExD,EAAK,OAAS,GAAS,QAAU,KACjC,EAAK,UAAY,GAAY,WAAW,aAAa,EAAE,QAAQ,aAAa,EAAI,IAAM,IAAM,CAAC,EAAK,OAClG,EAAK,UAAY,GAAS,QAAQ,iBAAmB,KAErD,EAAK,IAAM,GAAY,eAAiB,KAExC,EAAK,aAAe,GAAY,YAAc,GAAS,aAAa,6BAA6B,EAAE,QAEnG,EAAK,KAAO,OAAO,QAAY,KAAe,SAAS,SAAS,OAAS,OACzE,EAAK,QAAU,CAAC,EAAK,UAAY,CAAC,EAAK,WAAa,CAAC,EAAK,KAI1D,EAAK,OAAS,OAAO,kBAAsB,KAAe,gBAAgB,kBAG1E,EAAK,KAAO,OAAO,KAAS,KAAe,OAAO,OAAW,IAC7D,EAAK,KAAO,EAAK,KAEjB,EAAK,YAAc,EAAK,WAAa,EAAK,MAC1C,EAAK,UAAY,EAAK,WAAa,EAAK,IACxC,EAAK,YAAc,EAAK,UAIxB,EAAK,MAAS,GAAW,iBAAkB,IAAa,GAAY,gBAAkB,GAAK,GAAM,GAAY,kBAAoB,GAAS,WAAe,GAAS,eAAiB,oBAAoB,cAEhM,EAGT,SAAgB,GAAY,CAC1B,OAAO,OAAO,OAAW,KAAe,aAAe,OAOzD,SAAgB,EAAe,EAAqB,CAC9C,GAAW,CACb,OAAO,iBAAiB,eAAgB,EAAQ,CACzC,OAAO,QAAY,KAC1B,QAAQ,GAAG,WAAc,EAAQ"}
1
+ {"version":3,"file":"platform.mjs","names":[],"sources":["../../src/common/platform.ts"],"sourcesContent":["/* eslint-disable no-restricted-globals */\n/* eslint-disable node/prefer-global/process */\n\n/**\n * Retrieves the global `localStorage` object.\n * @returns The global `localStorage` object if available, otherwise `undefined`.\n */\nexport function getLocalStorage(): any | undefined {\n if (typeof localStorage !== 'undefined')\n return localStorage\n}\n\n/**\n * Retrieves the global `window` object.\n * @returns The global `window` object if available, otherwise `undefined`.\n */\nexport function getWindow(): any | undefined {\n if (typeof window !== 'undefined')\n return window\n}\n\n/**\n * Retrieves the navigator object if it is available.\n * @returns The navigator object if available, otherwise undefined.\n */\nexport function getNavigator(): any | undefined {\n if (typeof navigator !== 'undefined')\n return navigator\n}\n\n/**\n * Retrieves the global object in the current environment.\n * @returns The global object.\n */\nexport function getGlobal(): any {\n return getWindow()\n // @ts-expect-error xxx\n ?? typeof WorkerGlobalScope !== 'undefined'\n ? self\n : typeof global !== 'undefined'\n ? global\n // eslint-disable-next-line no-new-func\n : new Function('return this;')()\n}\n\n/** @deprecated */\nexport function detect(\n info = {\n ios: false,\n macos: false,\n windows: false,\n beaker: false,\n electron: false,\n wkwebview: false,\n pwa: false,\n pwaInstalled: false,\n browser: false,\n node: false,\n worker: false,\n test: false,\n jest: false,\n macosNative: false,\n iosNative: false,\n appleNative: false,\n touch: false,\n },\n) {\n const _navigator = getNavigator()\n const _window = getWindow()\n\n info.ios = _navigator?.platform?.match(/(iPhone|iPod|iPad)/i) != null\n info.macos = !!_navigator?.platform?.startsWith('Mac')\n info.windows = !!_navigator?.platform?.startsWith('Win')\n\n info.beaker = _window?.beaker != null // https://github.com/beakerbrowser/beaker\n info.electron = (_navigator?.userAgent?.toLowerCase()?.indexOf(' electron/') || -1) > -1 && !info.beaker\n info.wkwebview = _window?.webkit?.messageHandlers != null // Apple embedded\n\n info.pwa = _navigator?.serviceWorker != null\n\n info.pwaInstalled = _navigator?.standalone || _window?.matchMedia?.('(display-mode: standalone)')?.matches\n\n info.node = typeof process !== 'undefined' && process?.release?.name === 'node'\n info.browser = !info.electron && !info.wkwebview && !info.node\n\n // info.worker = typeof importScripts === 'function'\n // @ts-expect-error xxx\n info.worker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope\n // @ts-expect-error xxx\n\n info.jest = typeof jest !== 'undefined' || typeof vitest !== 'undefined' // || globalThis.__vitest_browser_runner__ != null || globalThis.__vitest_ui_api__ != null\n info.test = info.jest\n\n info.macosNative = info.wkwebview && info.macos\n info.iosNative = info.wkwebview && info.ios\n info.appleNative = info.wkwebview\n\n // https://github.com/viljamis/feature.js/blob/master/feature.js#L203\n // @ts-expect-error xxx\n info.touch = (_window && 'ontouchstart' in _window) || (_navigator?.maxTouchPoints || 0) > 1 || (_navigator?.msPointerEnabled && _window?.MSGesture) || (_window?.DocumentTouch && document instanceof DocumentTouch)\n\n return info\n}\n\nexport function isBrowser() {\n return typeof window !== 'undefined' && globalThis === window\n}\n\n/**\n * Before closing the tab/window or quitting the node process\n * allow to do something important first\n */\nexport function useExitHandler(handler: () => void) {\n if (isBrowser())\n window.addEventListener('beforeunload', handler)\n else if (typeof process !== 'undefined')\n process.on('exit', () => handler)\n}\n"],"mappings":";;;;;AAOA,SAAgB,kBAAmC;AACjD,KAAI,OAAO,iBAAiB,YAC1B,QAAO;;;;;;AAOX,SAAgB,YAA6B;AAC3C,KAAI,OAAO,WAAW,YACpB,QAAO;;;;;;AAOX,SAAgB,eAAgC;AAC9C,KAAI,OAAO,cAAc,YACvB,QAAO;;;;;;AAOX,SAAgB,YAAiB;AAC/B,QAAO,WAAW,IAEb,OAAO,sBAAsB,cAC9B,OACA,OAAO,WAAW,cAChB,SAEA,IAAI,SAAS,eAAe,EAAE;;;AAItC,SAAgB,OACd,OAAO;CACL,KAAK;CACL,OAAO;CACP,SAAS;CACT,QAAQ;CACR,UAAU;CACV,WAAW;CACX,KAAK;CACL,cAAc;CACd,SAAS;CACT,MAAM;CACN,QAAQ;CACR,MAAM;CACN,MAAM;CACN,aAAa;CACb,WAAW;CACX,aAAa;CACb,OAAO;CACR,EACD;CACA,MAAM,aAAa,cAAc;CACjC,MAAM,UAAU,WAAW;AAE3B,MAAK,MAAM,YAAY,UAAU,MAAM,sBAAsB,IAAI;AACjE,MAAK,QAAQ,CAAC,CAAC,YAAY,UAAU,WAAW,MAAM;AACtD,MAAK,UAAU,CAAC,CAAC,YAAY,UAAU,WAAW,MAAM;AAExD,MAAK,SAAS,SAAS,UAAU;AACjC,MAAK,YAAY,YAAY,WAAW,aAAa,EAAE,QAAQ,aAAa,IAAI,MAAM,MAAM,CAAC,KAAK;AAClG,MAAK,YAAY,SAAS,QAAQ,mBAAmB;AAErD,MAAK,MAAM,YAAY,iBAAiB;AAExC,MAAK,eAAe,YAAY,cAAc,SAAS,aAAa,6BAA6B,EAAE;AAEnG,MAAK,OAAO,OAAO,YAAY,eAAe,SAAS,SAAS,SAAS;AACzE,MAAK,UAAU,CAAC,KAAK,YAAY,CAAC,KAAK,aAAa,CAAC,KAAK;AAI1D,MAAK,SAAS,OAAO,sBAAsB,eAAe,gBAAgB;AAG1E,MAAK,OAAO,OAAO,SAAS,eAAe,OAAO,WAAW;AAC7D,MAAK,OAAO,KAAK;AAEjB,MAAK,cAAc,KAAK,aAAa,KAAK;AAC1C,MAAK,YAAY,KAAK,aAAa,KAAK;AACxC,MAAK,cAAc,KAAK;AAIxB,MAAK,QAAS,WAAW,kBAAkB,YAAa,YAAY,kBAAkB,KAAK,KAAM,YAAY,oBAAoB,SAAS,aAAe,SAAS,iBAAiB,oBAAoB;AAEvM,QAAO;;AAGT,SAAgB,YAAY;AAC1B,QAAO,OAAO,WAAW,eAAe,eAAe;;;;;;AAOzD,SAAgB,eAAe,SAAqB;AAClD,KAAI,WAAW,CACb,QAAO,iBAAiB,gBAAgB,QAAQ;UACzC,OAAO,YAAY,YAC1B,SAAQ,GAAG,cAAc,QAAQ"}
@@ -1 +1 @@
1
- export{};
1
+ export { };
@@ -1 +1 @@
1
- export{};
1
+ export { };
@@ -1 +1 @@
1
- export{};
1
+ export { };
@@ -1,2 +1,55 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../data/is.cjs`),t=require(`../data/object.cjs`),n={string:`string`,number:`number`,boolean:`boolean`,int:`integer`};function r(r){function i(r){let a=n[r.type]??r.type??`object`,o={},s=[];return t.objectMap(r._object,(e,t)=>{o[e]={type:n[t.type]??t.type};let r=t._enumValues;r&&(o[e].enum=r),t._default!==void 0&&(o[e].default=t._default),t._meta?.desc&&(o[e].description=t._meta.desc),t._optional!==!0&&s.push(e),t.type===`array`&&t._type?o[e].items=i(t._type):t.type===`object`&&t._object?(Object.assign(o[e],i(t)),o[e].additionalProperties=!1):t.type===`record`&&t._type?(o[e].type=`object`,o[e].additionalProperties=i(t._type)):t.type===`union`&&Array.isArray(t._union)&&(o[e].type=t._union.map(e=>n[e.type]??e.type))}),e.isEmpty(o)?{type:a}:{type:a,properties:o,additionalProperties:!1,...s.length>0?{required:s}:{}}}return{$schema:`http://json-schema.org/draft-07/schema#`,additionalProperties:!1,...i(r)}}function i(e){let t=r(e);return JSON.stringify(t,null,2)}exports.schemaExportJsonSchema=r,exports.schemaExportJsonSchemaString=i;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_common_data_is = require('../data/is.cjs');
3
+ const require_common_data_object = require('../data/object.cjs');
4
+
5
+ //#region src/common/schema/export-json-schema.ts
6
+ const _mapJsonSchemaType = {
7
+ string: "string",
8
+ number: "number",
9
+ boolean: "boolean",
10
+ int: "integer"
11
+ };
12
+ function schemaExportJsonSchema(schema) {
13
+ function transformSchema(schema) {
14
+ const type = _mapJsonSchemaType[schema.type] ?? schema.type ?? "object";
15
+ const properties = {};
16
+ const required = [];
17
+ require_common_data_object.objectMap(schema._object, (key, schema) => {
18
+ properties[key] = { type: _mapJsonSchemaType[schema.type] ?? schema.type };
19
+ const enumValues = schema._enumValues;
20
+ if (enumValues) properties[key].enum = enumValues;
21
+ if (schema._default !== void 0) properties[key].default = schema._default;
22
+ if (schema._meta?.desc) properties[key].description = schema._meta.desc;
23
+ if (schema._optional !== true) required.push(key);
24
+ if (schema.type === "array" && schema._type) properties[key].items = transformSchema(schema._type);
25
+ else if (schema.type === "object" && schema._object) {
26
+ Object.assign(properties[key], transformSchema(schema));
27
+ properties[key].additionalProperties = false;
28
+ } else if (schema.type === "record" && schema._type) {
29
+ properties[key].type = "object";
30
+ properties[key].additionalProperties = transformSchema(schema._type);
31
+ } else if (schema.type === "union" && Array.isArray(schema._union)) properties[key].type = schema._union.map((s) => _mapJsonSchemaType[s.type] ?? s.type);
32
+ });
33
+ if (!require_common_data_is.isEmpty(properties)) return {
34
+ type,
35
+ properties,
36
+ additionalProperties: false,
37
+ ...required.length > 0 ? { required } : {}
38
+ };
39
+ return { type };
40
+ }
41
+ return {
42
+ $schema: "http://json-schema.org/draft-07/schema#",
43
+ additionalProperties: false,
44
+ ...transformSchema(schema)
45
+ };
46
+ }
47
+ function schemaExportJsonSchemaString(schema) {
48
+ const jsonSchema = schemaExportJsonSchema(schema);
49
+ return JSON.stringify(jsonSchema, null, 2);
50
+ }
51
+
52
+ //#endregion
53
+ exports.schemaExportJsonSchema = schemaExportJsonSchema;
54
+ exports.schemaExportJsonSchemaString = schemaExportJsonSchemaString;
2
55
  //# sourceMappingURL=export-json-schema.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"export-json-schema.cjs","names":["isEmpty"],"sources":["../../../src/common/schema/export-json-schema.ts"],"sourcesContent":["import type { Type } from './schema'\nimport { isEmpty } from '../data'\nimport { objectMap } from '../data/object'\n\nconst _mapJsonSchemaType: Record<string, string> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n int: 'integer',\n}\n\nexport function schemaExportJsonSchema<T>(schema: Type<T>): Record<string, any> {\n // assert(isSchemaObjectFlat(schema), 'schema should be a flat object')\n\n function transformSchema(schema: Type<any>): any {\n const type = _mapJsonSchemaType[schema.type] ?? schema.type ?? 'object'\n const properties: Record<string, any> = {}\n const required: string[] = []\n\n objectMap(schema._object!, (key, schema: any) => {\n const type = _mapJsonSchemaType[schema.type] ?? schema.type\n properties[key] = { type }\n const enumValues = (schema as any)._enumValues\n if (enumValues) {\n properties[key].enum = enumValues\n }\n if (schema._default !== undefined) {\n properties[key].default = schema._default\n }\n if (schema._meta?.desc) {\n properties[key].description = schema._meta.desc\n }\n if (schema._optional !== true) {\n required.push(key)\n }\n if (schema.type === 'array' && schema._type) {\n properties[key].items = transformSchema(schema._type)\n }\n else if (schema.type === 'object' && schema._object) {\n Object.assign(properties[key], transformSchema(schema))\n properties[key].additionalProperties = false\n }\n else if (schema.type === 'record' && schema._type) {\n properties[key].type = 'object'\n properties[key].additionalProperties = transformSchema(schema._type)\n }\n // Handle union types (e.g., z.union)\n else if (schema.type === 'union' && Array.isArray(schema._union)) {\n properties[key].type = schema._union.map((s: any) => _mapJsonSchemaType[s.type] ?? s.type) // todo complex types\n }\n })\n\n if (!isEmpty(properties)) {\n return {\n type,\n properties,\n additionalProperties: false,\n ...(required.length > 0 ? { required } : {}),\n }\n }\n\n return {\n type,\n }\n }\n\n return {\n $schema: 'http://json-schema.org/draft-07/schema#',\n additionalProperties: false,\n ...transformSchema(schema),\n }\n}\n\nexport function schemaExportJsonSchemaString<T>(schema: Type<T>): string {\n const jsonSchema = schemaExportJsonSchema(schema)\n return JSON.stringify(jsonSchema, null, 2)\n}\n"],"mappings":"qIAIM,EAA6C,CACjD,OAAQ,SACR,OAAQ,SACR,QAAS,UACT,IAAK,UACN,CAED,SAAgB,EAA0B,EAAsC,CAG9E,SAAS,EAAgB,EAAwB,CAC/C,IAAM,EAAO,EAAmB,EAAO,OAAS,EAAO,MAAQ,SACzD,EAAkC,EAAE,CACpC,EAAqB,EAAE,CA4C7B,OA1CA,EAAA,UAAU,EAAO,SAAW,EAAK,IAAgB,CAE/C,EAAW,GAAO,CAAE,KADP,EAAmB,EAAO,OAAS,EAAO,KAC7B,CAC1B,IAAM,EAAc,EAAe,YAC/B,IACF,EAAW,GAAK,KAAO,GAErB,EAAO,WAAa,IAAA,KACtB,EAAW,GAAK,QAAU,EAAO,UAE/B,EAAO,OAAO,OAChB,EAAW,GAAK,YAAc,EAAO,MAAM,MAEzC,EAAO,YAAc,IACvB,EAAS,KAAK,EAAI,CAEhB,EAAO,OAAS,SAAW,EAAO,MACpC,EAAW,GAAK,MAAQ,EAAgB,EAAO,MAAM,CAE9C,EAAO,OAAS,UAAY,EAAO,SAC1C,OAAO,OAAO,EAAW,GAAM,EAAgB,EAAO,CAAC,CACvD,EAAW,GAAK,qBAAuB,IAEhC,EAAO,OAAS,UAAY,EAAO,OAC1C,EAAW,GAAK,KAAO,SACvB,EAAW,GAAK,qBAAuB,EAAgB,EAAO,MAAM,EAG7D,EAAO,OAAS,SAAW,MAAM,QAAQ,EAAO,OAAO,GAC9D,EAAW,GAAK,KAAO,EAAO,OAAO,IAAK,GAAW,EAAmB,EAAE,OAAS,EAAE,KAAK,GAE5F,CAEGA,EAAAA,QAAQ,EAAW,CASjB,CACL,OACD,CAVQ,CACL,OACA,aACA,qBAAsB,GACtB,GAAI,EAAS,OAAS,EAAI,CAAE,WAAU,CAAG,EAAE,CAC5C,CAQL,MAAO,CACL,QAAS,0CACT,qBAAsB,GACtB,GAAG,EAAgB,EAAO,CAC3B,CAGH,SAAgB,EAAgC,EAAyB,CACvE,IAAM,EAAa,EAAuB,EAAO,CACjD,OAAO,KAAK,UAAU,EAAY,KAAM,EAAE"}
1
+ {"version":3,"file":"export-json-schema.cjs","names":["isEmpty"],"sources":["../../../src/common/schema/export-json-schema.ts"],"sourcesContent":["import type { Type } from './schema'\nimport { isEmpty } from '../data'\nimport { objectMap } from '../data/object'\n\nconst _mapJsonSchemaType: Record<string, string> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n int: 'integer',\n}\n\nexport function schemaExportJsonSchema<T>(schema: Type<T>): Record<string, any> {\n // assert(isSchemaObjectFlat(schema), 'schema should be a flat object')\n\n function transformSchema(schema: Type<any>): any {\n const type = _mapJsonSchemaType[schema.type] ?? schema.type ?? 'object'\n const properties: Record<string, any> = {}\n const required: string[] = []\n\n objectMap(schema._object!, (key, schema: any) => {\n const type = _mapJsonSchemaType[schema.type] ?? schema.type\n properties[key] = { type }\n const enumValues = (schema as any)._enumValues\n if (enumValues) {\n properties[key].enum = enumValues\n }\n if (schema._default !== undefined) {\n properties[key].default = schema._default\n }\n if (schema._meta?.desc) {\n properties[key].description = schema._meta.desc\n }\n if (schema._optional !== true) {\n required.push(key)\n }\n if (schema.type === 'array' && schema._type) {\n properties[key].items = transformSchema(schema._type)\n }\n else if (schema.type === 'object' && schema._object) {\n Object.assign(properties[key], transformSchema(schema))\n properties[key].additionalProperties = false\n }\n else if (schema.type === 'record' && schema._type) {\n properties[key].type = 'object'\n properties[key].additionalProperties = transformSchema(schema._type)\n }\n // Handle union types (e.g., z.union)\n else if (schema.type === 'union' && Array.isArray(schema._union)) {\n properties[key].type = schema._union.map((s: any) => _mapJsonSchemaType[s.type] ?? s.type) // todo complex types\n }\n })\n\n if (!isEmpty(properties)) {\n return {\n type,\n properties,\n additionalProperties: false,\n ...(required.length > 0 ? { required } : {}),\n }\n }\n\n return {\n type,\n }\n }\n\n return {\n $schema: 'http://json-schema.org/draft-07/schema#',\n additionalProperties: false,\n ...transformSchema(schema),\n }\n}\n\nexport function schemaExportJsonSchemaString<T>(schema: Type<T>): string {\n const jsonSchema = schemaExportJsonSchema(schema)\n return JSON.stringify(jsonSchema, null, 2)\n}\n"],"mappings":";;;;;AAIA,MAAM,qBAA6C;CACjD,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,KAAK;CACN;AAED,SAAgB,uBAA0B,QAAsC;CAG9E,SAAS,gBAAgB,QAAwB;EAC/C,MAAM,OAAO,mBAAmB,OAAO,SAAS,OAAO,QAAQ;EAC/D,MAAM,aAAkC,EAAE;EAC1C,MAAM,WAAqB,EAAE;AAE7B,uCAAU,OAAO,UAAW,KAAK,WAAgB;AAE/C,cAAW,OAAO,EAAE,MADP,mBAAmB,OAAO,SAAS,OAAO,MAC7B;GAC1B,MAAM,aAAc,OAAe;AACnC,OAAI,WACF,YAAW,KAAK,OAAO;AAEzB,OAAI,OAAO,aAAa,OACtB,YAAW,KAAK,UAAU,OAAO;AAEnC,OAAI,OAAO,OAAO,KAChB,YAAW,KAAK,cAAc,OAAO,MAAM;AAE7C,OAAI,OAAO,cAAc,KACvB,UAAS,KAAK,IAAI;AAEpB,OAAI,OAAO,SAAS,WAAW,OAAO,MACpC,YAAW,KAAK,QAAQ,gBAAgB,OAAO,MAAM;YAE9C,OAAO,SAAS,YAAY,OAAO,SAAS;AACnD,WAAO,OAAO,WAAW,MAAM,gBAAgB,OAAO,CAAC;AACvD,eAAW,KAAK,uBAAuB;cAEhC,OAAO,SAAS,YAAY,OAAO,OAAO;AACjD,eAAW,KAAK,OAAO;AACvB,eAAW,KAAK,uBAAuB,gBAAgB,OAAO,MAAM;cAG7D,OAAO,SAAS,WAAW,MAAM,QAAQ,OAAO,OAAO,CAC9D,YAAW,KAAK,OAAO,OAAO,OAAO,KAAK,MAAW,mBAAmB,EAAE,SAAS,EAAE,KAAK;IAE5F;AAEF,MAAI,CAACA,+BAAQ,WAAW,CACtB,QAAO;GACL;GACA;GACA,sBAAsB;GACtB,GAAI,SAAS,SAAS,IAAI,EAAE,UAAU,GAAG,EAAE;GAC5C;AAGH,SAAO,EACL,MACD;;AAGH,QAAO;EACL,SAAS;EACT,sBAAsB;EACtB,GAAG,gBAAgB,OAAO;EAC3B;;AAGH,SAAgB,6BAAgC,QAAyB;CACvE,MAAM,aAAa,uBAAuB,OAAO;AACjD,QAAO,KAAK,UAAU,YAAY,MAAM,EAAE"}
@@ -1,2 +1,53 @@
1
- import{isEmpty as e}from"../data/is.mjs";import{objectMap as t}from"../data/object.mjs";const n={string:`string`,number:`number`,boolean:`boolean`,int:`integer`};function r(r){function i(r){let a=n[r.type]??r.type??`object`,o={},s=[];return t(r._object,(e,t)=>{o[e]={type:n[t.type]??t.type};let r=t._enumValues;r&&(o[e].enum=r),t._default!==void 0&&(o[e].default=t._default),t._meta?.desc&&(o[e].description=t._meta.desc),t._optional!==!0&&s.push(e),t.type===`array`&&t._type?o[e].items=i(t._type):t.type===`object`&&t._object?(Object.assign(o[e],i(t)),o[e].additionalProperties=!1):t.type===`record`&&t._type?(o[e].type=`object`,o[e].additionalProperties=i(t._type)):t.type===`union`&&Array.isArray(t._union)&&(o[e].type=t._union.map(e=>n[e.type]??e.type))}),e(o)?{type:a}:{type:a,properties:o,additionalProperties:!1,...s.length>0?{required:s}:{}}}return{$schema:`http://json-schema.org/draft-07/schema#`,additionalProperties:!1,...i(r)}}function i(e){let t=r(e);return JSON.stringify(t,null,2)}export{r as schemaExportJsonSchema,i as schemaExportJsonSchemaString};
1
+ import { isEmpty } from "../data/is.mjs";
2
+ import { objectMap } from "../data/object.mjs";
3
+
4
+ //#region src/common/schema/export-json-schema.ts
5
+ const _mapJsonSchemaType = {
6
+ string: "string",
7
+ number: "number",
8
+ boolean: "boolean",
9
+ int: "integer"
10
+ };
11
+ function schemaExportJsonSchema(schema) {
12
+ function transformSchema(schema) {
13
+ const type = _mapJsonSchemaType[schema.type] ?? schema.type ?? "object";
14
+ const properties = {};
15
+ const required = [];
16
+ objectMap(schema._object, (key, schema) => {
17
+ properties[key] = { type: _mapJsonSchemaType[schema.type] ?? schema.type };
18
+ const enumValues = schema._enumValues;
19
+ if (enumValues) properties[key].enum = enumValues;
20
+ if (schema._default !== void 0) properties[key].default = schema._default;
21
+ if (schema._meta?.desc) properties[key].description = schema._meta.desc;
22
+ if (schema._optional !== true) required.push(key);
23
+ if (schema.type === "array" && schema._type) properties[key].items = transformSchema(schema._type);
24
+ else if (schema.type === "object" && schema._object) {
25
+ Object.assign(properties[key], transformSchema(schema));
26
+ properties[key].additionalProperties = false;
27
+ } else if (schema.type === "record" && schema._type) {
28
+ properties[key].type = "object";
29
+ properties[key].additionalProperties = transformSchema(schema._type);
30
+ } else if (schema.type === "union" && Array.isArray(schema._union)) properties[key].type = schema._union.map((s) => _mapJsonSchemaType[s.type] ?? s.type);
31
+ });
32
+ if (!isEmpty(properties)) return {
33
+ type,
34
+ properties,
35
+ additionalProperties: false,
36
+ ...required.length > 0 ? { required } : {}
37
+ };
38
+ return { type };
39
+ }
40
+ return {
41
+ $schema: "http://json-schema.org/draft-07/schema#",
42
+ additionalProperties: false,
43
+ ...transformSchema(schema)
44
+ };
45
+ }
46
+ function schemaExportJsonSchemaString(schema) {
47
+ const jsonSchema = schemaExportJsonSchema(schema);
48
+ return JSON.stringify(jsonSchema, null, 2);
49
+ }
50
+
51
+ //#endregion
52
+ export { schemaExportJsonSchema, schemaExportJsonSchemaString };
2
53
  //# sourceMappingURL=export-json-schema.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"export-json-schema.mjs","names":[],"sources":["../../../src/common/schema/export-json-schema.ts"],"sourcesContent":["import type { Type } from './schema'\nimport { isEmpty } from '../data'\nimport { objectMap } from '../data/object'\n\nconst _mapJsonSchemaType: Record<string, string> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n int: 'integer',\n}\n\nexport function schemaExportJsonSchema<T>(schema: Type<T>): Record<string, any> {\n // assert(isSchemaObjectFlat(schema), 'schema should be a flat object')\n\n function transformSchema(schema: Type<any>): any {\n const type = _mapJsonSchemaType[schema.type] ?? schema.type ?? 'object'\n const properties: Record<string, any> = {}\n const required: string[] = []\n\n objectMap(schema._object!, (key, schema: any) => {\n const type = _mapJsonSchemaType[schema.type] ?? schema.type\n properties[key] = { type }\n const enumValues = (schema as any)._enumValues\n if (enumValues) {\n properties[key].enum = enumValues\n }\n if (schema._default !== undefined) {\n properties[key].default = schema._default\n }\n if (schema._meta?.desc) {\n properties[key].description = schema._meta.desc\n }\n if (schema._optional !== true) {\n required.push(key)\n }\n if (schema.type === 'array' && schema._type) {\n properties[key].items = transformSchema(schema._type)\n }\n else if (schema.type === 'object' && schema._object) {\n Object.assign(properties[key], transformSchema(schema))\n properties[key].additionalProperties = false\n }\n else if (schema.type === 'record' && schema._type) {\n properties[key].type = 'object'\n properties[key].additionalProperties = transformSchema(schema._type)\n }\n // Handle union types (e.g., z.union)\n else if (schema.type === 'union' && Array.isArray(schema._union)) {\n properties[key].type = schema._union.map((s: any) => _mapJsonSchemaType[s.type] ?? s.type) // todo complex types\n }\n })\n\n if (!isEmpty(properties)) {\n return {\n type,\n properties,\n additionalProperties: false,\n ...(required.length > 0 ? { required } : {}),\n }\n }\n\n return {\n type,\n }\n }\n\n return {\n $schema: 'http://json-schema.org/draft-07/schema#',\n additionalProperties: false,\n ...transformSchema(schema),\n }\n}\n\nexport function schemaExportJsonSchemaString<T>(schema: Type<T>): string {\n const jsonSchema = schemaExportJsonSchema(schema)\n return JSON.stringify(jsonSchema, null, 2)\n}\n"],"mappings":"wFAIA,MAAM,EAA6C,CACjD,OAAQ,SACR,OAAQ,SACR,QAAS,UACT,IAAK,UACN,CAED,SAAgB,EAA0B,EAAsC,CAG9E,SAAS,EAAgB,EAAwB,CAC/C,IAAM,EAAO,EAAmB,EAAO,OAAS,EAAO,MAAQ,SACzD,EAAkC,EAAE,CACpC,EAAqB,EAAE,CA4C7B,OA1CA,EAAU,EAAO,SAAW,EAAK,IAAgB,CAE/C,EAAW,GAAO,CAAE,KADP,EAAmB,EAAO,OAAS,EAAO,KAC7B,CAC1B,IAAM,EAAc,EAAe,YAC/B,IACF,EAAW,GAAK,KAAO,GAErB,EAAO,WAAa,IAAA,KACtB,EAAW,GAAK,QAAU,EAAO,UAE/B,EAAO,OAAO,OAChB,EAAW,GAAK,YAAc,EAAO,MAAM,MAEzC,EAAO,YAAc,IACvB,EAAS,KAAK,EAAI,CAEhB,EAAO,OAAS,SAAW,EAAO,MACpC,EAAW,GAAK,MAAQ,EAAgB,EAAO,MAAM,CAE9C,EAAO,OAAS,UAAY,EAAO,SAC1C,OAAO,OAAO,EAAW,GAAM,EAAgB,EAAO,CAAC,CACvD,EAAW,GAAK,qBAAuB,IAEhC,EAAO,OAAS,UAAY,EAAO,OAC1C,EAAW,GAAK,KAAO,SACvB,EAAW,GAAK,qBAAuB,EAAgB,EAAO,MAAM,EAG7D,EAAO,OAAS,SAAW,MAAM,QAAQ,EAAO,OAAO,GAC9D,EAAW,GAAK,KAAO,EAAO,OAAO,IAAK,GAAW,EAAmB,EAAE,OAAS,EAAE,KAAK,GAE5F,CAEG,EAAQ,EAAW,CASjB,CACL,OACD,CAVQ,CACL,OACA,aACA,qBAAsB,GACtB,GAAI,EAAS,OAAS,EAAI,CAAE,WAAU,CAAG,EAAE,CAC5C,CAQL,MAAO,CACL,QAAS,0CACT,qBAAsB,GACtB,GAAG,EAAgB,EAAO,CAC3B,CAGH,SAAgB,EAAgC,EAAyB,CACvE,IAAM,EAAa,EAAuB,EAAO,CACjD,OAAO,KAAK,UAAU,EAAY,KAAM,EAAE"}
1
+ {"version":3,"file":"export-json-schema.mjs","names":[],"sources":["../../../src/common/schema/export-json-schema.ts"],"sourcesContent":["import type { Type } from './schema'\nimport { isEmpty } from '../data'\nimport { objectMap } from '../data/object'\n\nconst _mapJsonSchemaType: Record<string, string> = {\n string: 'string',\n number: 'number',\n boolean: 'boolean',\n int: 'integer',\n}\n\nexport function schemaExportJsonSchema<T>(schema: Type<T>): Record<string, any> {\n // assert(isSchemaObjectFlat(schema), 'schema should be a flat object')\n\n function transformSchema(schema: Type<any>): any {\n const type = _mapJsonSchemaType[schema.type] ?? schema.type ?? 'object'\n const properties: Record<string, any> = {}\n const required: string[] = []\n\n objectMap(schema._object!, (key, schema: any) => {\n const type = _mapJsonSchemaType[schema.type] ?? schema.type\n properties[key] = { type }\n const enumValues = (schema as any)._enumValues\n if (enumValues) {\n properties[key].enum = enumValues\n }\n if (schema._default !== undefined) {\n properties[key].default = schema._default\n }\n if (schema._meta?.desc) {\n properties[key].description = schema._meta.desc\n }\n if (schema._optional !== true) {\n required.push(key)\n }\n if (schema.type === 'array' && schema._type) {\n properties[key].items = transformSchema(schema._type)\n }\n else if (schema.type === 'object' && schema._object) {\n Object.assign(properties[key], transformSchema(schema))\n properties[key].additionalProperties = false\n }\n else if (schema.type === 'record' && schema._type) {\n properties[key].type = 'object'\n properties[key].additionalProperties = transformSchema(schema._type)\n }\n // Handle union types (e.g., z.union)\n else if (schema.type === 'union' && Array.isArray(schema._union)) {\n properties[key].type = schema._union.map((s: any) => _mapJsonSchemaType[s.type] ?? s.type) // todo complex types\n }\n })\n\n if (!isEmpty(properties)) {\n return {\n type,\n properties,\n additionalProperties: false,\n ...(required.length > 0 ? { required } : {}),\n }\n }\n\n return {\n type,\n }\n }\n\n return {\n $schema: 'http://json-schema.org/draft-07/schema#',\n additionalProperties: false,\n ...transformSchema(schema),\n }\n}\n\nexport function schemaExportJsonSchemaString<T>(schema: Type<T>): string {\n const jsonSchema = schemaExportJsonSchema(schema)\n return JSON.stringify(jsonSchema, null, 2)\n}\n"],"mappings":";;;;AAIA,MAAM,qBAA6C;CACjD,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,KAAK;CACN;AAED,SAAgB,uBAA0B,QAAsC;CAG9E,SAAS,gBAAgB,QAAwB;EAC/C,MAAM,OAAO,mBAAmB,OAAO,SAAS,OAAO,QAAQ;EAC/D,MAAM,aAAkC,EAAE;EAC1C,MAAM,WAAqB,EAAE;AAE7B,YAAU,OAAO,UAAW,KAAK,WAAgB;AAE/C,cAAW,OAAO,EAAE,MADP,mBAAmB,OAAO,SAAS,OAAO,MAC7B;GAC1B,MAAM,aAAc,OAAe;AACnC,OAAI,WACF,YAAW,KAAK,OAAO;AAEzB,OAAI,OAAO,aAAa,OACtB,YAAW,KAAK,UAAU,OAAO;AAEnC,OAAI,OAAO,OAAO,KAChB,YAAW,KAAK,cAAc,OAAO,MAAM;AAE7C,OAAI,OAAO,cAAc,KACvB,UAAS,KAAK,IAAI;AAEpB,OAAI,OAAO,SAAS,WAAW,OAAO,MACpC,YAAW,KAAK,QAAQ,gBAAgB,OAAO,MAAM;YAE9C,OAAO,SAAS,YAAY,OAAO,SAAS;AACnD,WAAO,OAAO,WAAW,MAAM,gBAAgB,OAAO,CAAC;AACvD,eAAW,KAAK,uBAAuB;cAEhC,OAAO,SAAS,YAAY,OAAO,OAAO;AACjD,eAAW,KAAK,OAAO;AACvB,eAAW,KAAK,uBAAuB,gBAAgB,OAAO,MAAM;cAG7D,OAAO,SAAS,WAAW,MAAM,QAAQ,OAAO,OAAO,CAC9D,YAAW,KAAK,OAAO,OAAO,OAAO,KAAK,MAAW,mBAAmB,EAAE,SAAS,EAAE,KAAK;IAE5F;AAEF,MAAI,CAAC,QAAQ,WAAW,CACtB,QAAO;GACL;GACA;GACA,sBAAsB;GACtB,GAAI,SAAS,SAAS,IAAI,EAAE,UAAU,GAAG,EAAE;GAC5C;AAGH,SAAO,EACL,MACD;;AAGH,QAAO;EACL,SAAS;EACT,sBAAsB;EACtB,GAAG,gBAAgB,OAAO;EAC3B;;AAGH,SAAgB,6BAAgC,QAAyB;CACvE,MAAM,aAAa,uBAAuB,OAAO;AACjD,QAAO,KAAK,UAAU,YAAY,MAAM,EAAE"}