@fragno-dev/upload 0.1.1

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 (355) hide show
  1. package/LICENSE.md +16 -0
  2. package/README.md +43 -0
  3. package/bin/run.js +5 -0
  4. package/dist/browser/client/clients.js +49 -0
  5. package/dist/browser/client/clients.js.map +1 -0
  6. package/dist/browser/client/helpers.d.ts +51 -0
  7. package/dist/browser/client/helpers.d.ts.map +1 -0
  8. package/dist/browser/client/helpers.js +242 -0
  9. package/dist/browser/client/helpers.js.map +1 -0
  10. package/dist/browser/client/node_modules/.pnpm/@nanostores_query@0.3.4_nanostores@1.1.0/node_modules/@nanostores/query/dist/nanoquery.js +354 -0
  11. package/dist/browser/client/node_modules/.pnpm/@nanostores_query@0.3.4_nanostores@1.1.0/node_modules/@nanostores/query/dist/nanoquery.js.map +1 -0
  12. package/dist/browser/client/node_modules/.pnpm/@nanostores_solid@1.1.1_nanostores@1.1.0_solid-js@1.9.10/node_modules/@nanostores/solid/dist/index.js +14 -0
  13. package/dist/browser/client/node_modules/.pnpm/@nanostores_solid@1.1.1_nanostores@1.1.0_solid-js@1.9.10/node_modules/@nanostores/solid/dist/index.js.map +1 -0
  14. package/dist/browser/client/node_modules/.pnpm/nanoevents@9.1.0/node_modules/nanoevents/index.js +17 -0
  15. package/dist/browser/client/node_modules/.pnpm/nanoevents@9.1.0/node_modules/nanoevents/index.js.map +1 -0
  16. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/atom/index.js +62 -0
  17. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/atom/index.js.map +1 -0
  18. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/clean-stores/index.js +6 -0
  19. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/clean-stores/index.js.map +1 -0
  20. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/computed/index.js +50 -0
  21. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/computed/index.js.map +1 -0
  22. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/lifecycle/index.js +99 -0
  23. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/lifecycle/index.js.map +1 -0
  24. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/listen-keys/index.js +11 -0
  25. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/listen-keys/index.js.map +1 -0
  26. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/map/index.js +25 -0
  27. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/map/index.js.map +1 -0
  28. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/task/index.js +24 -0
  29. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/task/index.js.map +1 -0
  30. package/dist/browser/client/packages/fragment-upload/src/definition.js +49 -0
  31. package/dist/browser/client/packages/fragment-upload/src/definition.js.map +1 -0
  32. package/dist/browser/client/packages/fragment-upload/src/keys.d.ts +7 -0
  33. package/dist/browser/client/packages/fragment-upload/src/keys.d.ts.map +1 -0
  34. package/dist/browser/client/packages/fragment-upload/src/keys.js +28 -0
  35. package/dist/browser/client/packages/fragment-upload/src/keys.js.map +1 -0
  36. package/dist/browser/client/packages/fragment-upload/src/routes/files.js +98 -0
  37. package/dist/browser/client/packages/fragment-upload/src/routes/files.js.map +1 -0
  38. package/dist/browser/client/packages/fragment-upload/src/routes/index.js +9 -0
  39. package/dist/browser/client/packages/fragment-upload/src/routes/index.js.map +1 -0
  40. package/dist/browser/client/packages/fragment-upload/src/routes/shared.js +41 -0
  41. package/dist/browser/client/packages/fragment-upload/src/routes/shared.js.map +1 -0
  42. package/dist/browser/client/packages/fragment-upload/src/routes/uploads.js +186 -0
  43. package/dist/browser/client/packages/fragment-upload/src/routes/uploads.js.map +1 -0
  44. package/dist/browser/client/packages/fragment-upload/src/schema.js +8 -0
  45. package/dist/browser/client/packages/fragment-upload/src/schema.js.map +1 -0
  46. package/dist/browser/client/packages/fragment-upload/src/storage/types.d.ts +9 -0
  47. package/dist/browser/client/packages/fragment-upload/src/storage/types.d.ts.map +1 -0
  48. package/dist/browser/client/packages/fragment-upload/src/types.d.ts +31 -0
  49. package/dist/browser/client/packages/fragment-upload/src/types.d.ts.map +1 -0
  50. package/dist/browser/client/packages/fragno/dist/api/error.js +48 -0
  51. package/dist/browser/client/packages/fragno/dist/api/error.js.map +1 -0
  52. package/dist/browser/client/packages/fragno/dist/api/internal/path.js +76 -0
  53. package/dist/browser/client/packages/fragno/dist/api/internal/path.js.map +1 -0
  54. package/dist/browser/client/packages/fragno/dist/api/internal/response-stream.js +81 -0
  55. package/dist/browser/client/packages/fragno/dist/api/internal/response-stream.js.map +1 -0
  56. package/dist/browser/client/packages/fragno/dist/api/internal/route.js +10 -0
  57. package/dist/browser/client/packages/fragno/dist/api/internal/route.js.map +1 -0
  58. package/dist/browser/client/packages/fragno/dist/api/request-input-context.js +185 -0
  59. package/dist/browser/client/packages/fragno/dist/api/request-input-context.js.map +1 -0
  60. package/dist/browser/client/packages/fragno/dist/api/request-output-context.js +119 -0
  61. package/dist/browser/client/packages/fragno/dist/api/request-output-context.js.map +1 -0
  62. package/dist/browser/client/packages/fragno/dist/api/route.js +17 -0
  63. package/dist/browser/client/packages/fragno/dist/api/route.js.map +1 -0
  64. package/dist/browser/client/packages/fragno/dist/client/client-error.js +92 -0
  65. package/dist/browser/client/packages/fragno/dist/client/client-error.js.map +1 -0
  66. package/dist/browser/client/packages/fragno/dist/client/client.js +495 -0
  67. package/dist/browser/client/packages/fragno/dist/client/client.js.map +1 -0
  68. package/dist/browser/client/packages/fragno/dist/client/client.svelte.js +120 -0
  69. package/dist/browser/client/packages/fragno/dist/client/client.svelte.js.map +1 -0
  70. package/dist/browser/client/packages/fragno/dist/client/internal/fetcher-merge.js +36 -0
  71. package/dist/browser/client/packages/fragno/dist/client/internal/fetcher-merge.js.map +1 -0
  72. package/dist/browser/client/packages/fragno/dist/client/internal/ndjson-streaming.js +139 -0
  73. package/dist/browser/client/packages/fragno/dist/client/internal/ndjson-streaming.js.map +1 -0
  74. package/dist/browser/client/packages/fragno/dist/client/react.js +70 -0
  75. package/dist/browser/client/packages/fragno/dist/client/react.js.map +1 -0
  76. package/dist/browser/client/packages/fragno/dist/client/solid.js +108 -0
  77. package/dist/browser/client/packages/fragno/dist/client/solid.js.map +1 -0
  78. package/dist/browser/client/packages/fragno/dist/client/vanilla.js +96 -0
  79. package/dist/browser/client/packages/fragno/dist/client/vanilla.js.map +1 -0
  80. package/dist/browser/client/packages/fragno/dist/client/vue.js +120 -0
  81. package/dist/browser/client/packages/fragno/dist/client/vue.js.map +1 -0
  82. package/dist/browser/client/packages/fragno/dist/util/async.js +40 -0
  83. package/dist/browser/client/packages/fragno/dist/util/async.js.map +1 -0
  84. package/dist/browser/client/packages/fragno/dist/util/content-type.js +49 -0
  85. package/dist/browser/client/packages/fragno/dist/util/content-type.js.map +1 -0
  86. package/dist/browser/client/packages/fragno/dist/util/nanostores.js +31 -0
  87. package/dist/browser/client/packages/fragno/dist/util/nanostores.js.map +1 -0
  88. package/dist/browser/client/packages/fragno/dist/util/ssr.js +18 -0
  89. package/dist/browser/client/packages/fragno/dist/util/ssr.js.map +1 -0
  90. package/dist/browser/client/react.d.ts +295 -0
  91. package/dist/browser/client/react.d.ts.map +1 -0
  92. package/dist/browser/client/react.js +11 -0
  93. package/dist/browser/client/react.js.map +1 -0
  94. package/dist/browser/client/solid.d.ts +303 -0
  95. package/dist/browser/client/solid.d.ts.map +1 -0
  96. package/dist/browser/client/solid.js +11 -0
  97. package/dist/browser/client/solid.js.map +1 -0
  98. package/dist/browser/client/svelte.d.ts +295 -0
  99. package/dist/browser/client/svelte.d.ts.map +1 -0
  100. package/dist/browser/client/svelte.js +11 -0
  101. package/dist/browser/client/svelte.js.map +1 -0
  102. package/dist/browser/client/vanilla.d.ts +296 -0
  103. package/dist/browser/client/vanilla.d.ts.map +1 -0
  104. package/dist/browser/client/vanilla.js +11 -0
  105. package/dist/browser/client/vanilla.js.map +1 -0
  106. package/dist/browser/client/vue.d.ts +295 -0
  107. package/dist/browser/client/vue.d.ts.map +1 -0
  108. package/dist/browser/client/vue.js +11 -0
  109. package/dist/browser/client/vue.js.map +1 -0
  110. package/dist/browser/index-BdjKPO4J.d.ts +177 -0
  111. package/dist/browser/index-BdjKPO4J.d.ts.map +1 -0
  112. package/dist/browser/index.js +3 -0
  113. package/dist/browser/src-vdNJUbjT.js +1982 -0
  114. package/dist/browser/src-vdNJUbjT.js.map +1 -0
  115. package/dist/cli/commands/files/delete.d.ts +40 -0
  116. package/dist/cli/commands/files/delete.d.ts.map +1 -0
  117. package/dist/cli/commands/files/delete.js +31 -0
  118. package/dist/cli/commands/files/delete.js.map +1 -0
  119. package/dist/cli/commands/files/download-url.d.ts +40 -0
  120. package/dist/cli/commands/files/download-url.d.ts.map +1 -0
  121. package/dist/cli/commands/files/download-url.js +31 -0
  122. package/dist/cli/commands/files/download-url.js.map +1 -0
  123. package/dist/cli/commands/files/download.d.ts +49 -0
  124. package/dist/cli/commands/files/download.d.ts.map +1 -0
  125. package/dist/cli/commands/files/download.js +65 -0
  126. package/dist/cli/commands/files/download.js.map +1 -0
  127. package/dist/cli/commands/files/get.d.ts +40 -0
  128. package/dist/cli/commands/files/get.d.ts.map +1 -0
  129. package/dist/cli/commands/files/get.js +31 -0
  130. package/dist/cli/commands/files/get.js.map +1 -0
  131. package/dist/cli/commands/files/list.d.ts +56 -0
  132. package/dist/cli/commands/files/list.d.ts.map +1 -0
  133. package/dist/cli/commands/files/list.js +53 -0
  134. package/dist/cli/commands/files/list.js.map +1 -0
  135. package/dist/cli/commands/files/update.d.ts +56 -0
  136. package/dist/cli/commands/files/update.d.ts.map +1 -0
  137. package/dist/cli/commands/files/update.js +53 -0
  138. package/dist/cli/commands/files/update.js.map +1 -0
  139. package/dist/cli/commands/files/upload.d.ts +73 -0
  140. package/dist/cli/commands/files/upload.d.ts.map +1 -0
  141. package/dist/cli/commands/files/upload.js +87 -0
  142. package/dist/cli/commands/files/upload.js.map +1 -0
  143. package/dist/cli/commands/uploads/abort.d.ts +37 -0
  144. package/dist/cli/commands/uploads/abort.d.ts.map +1 -0
  145. package/dist/cli/commands/uploads/abort.js +26 -0
  146. package/dist/cli/commands/uploads/abort.js.map +1 -0
  147. package/dist/cli/commands/uploads/complete.d.ts +41 -0
  148. package/dist/cli/commands/uploads/complete.d.ts.map +1 -0
  149. package/dist/cli/commands/uploads/complete.js +45 -0
  150. package/dist/cli/commands/uploads/complete.js.map +1 -0
  151. package/dist/cli/commands/uploads/content.d.ts +46 -0
  152. package/dist/cli/commands/uploads/content.d.ts.map +1 -0
  153. package/dist/cli/commands/uploads/content.js +43 -0
  154. package/dist/cli/commands/uploads/content.js.map +1 -0
  155. package/dist/cli/commands/uploads/create.d.ts +72 -0
  156. package/dist/cli/commands/uploads/create.d.ts.map +1 -0
  157. package/dist/cli/commands/uploads/create.js +84 -0
  158. package/dist/cli/commands/uploads/create.js.map +1 -0
  159. package/dist/cli/commands/uploads/get.d.ts +37 -0
  160. package/dist/cli/commands/uploads/get.d.ts.map +1 -0
  161. package/dist/cli/commands/uploads/get.js +26 -0
  162. package/dist/cli/commands/uploads/get.js.map +1 -0
  163. package/dist/cli/commands/uploads/parts-complete.d.ts +41 -0
  164. package/dist/cli/commands/uploads/parts-complete.d.ts.map +1 -0
  165. package/dist/cli/commands/uploads/parts-complete.js +44 -0
  166. package/dist/cli/commands/uploads/parts-complete.js.map +1 -0
  167. package/dist/cli/commands/uploads/parts-list.d.ts +37 -0
  168. package/dist/cli/commands/uploads/parts-list.d.ts.map +1 -0
  169. package/dist/cli/commands/uploads/parts-list.js +26 -0
  170. package/dist/cli/commands/uploads/parts-list.js.map +1 -0
  171. package/dist/cli/commands/uploads/parts-urls.d.ts +46 -0
  172. package/dist/cli/commands/uploads/parts-urls.d.ts.map +1 -0
  173. package/dist/cli/commands/uploads/parts-urls.js +57 -0
  174. package/dist/cli/commands/uploads/parts-urls.js.map +1 -0
  175. package/dist/cli/commands/uploads/progress.d.ts +45 -0
  176. package/dist/cli/commands/uploads/progress.d.ts.map +1 -0
  177. package/dist/cli/commands/uploads/progress.js +40 -0
  178. package/dist/cli/commands/uploads/progress.js.map +1 -0
  179. package/dist/cli/commands/uploads/transfer.d.ts +73 -0
  180. package/dist/cli/commands/uploads/transfer.d.ts.map +1 -0
  181. package/dist/cli/commands/uploads/transfer.js +170 -0
  182. package/dist/cli/commands/uploads/transfer.js.map +1 -0
  183. package/dist/cli/index.d.ts +27 -0
  184. package/dist/cli/index.d.ts.map +1 -0
  185. package/dist/cli/index.js +198 -0
  186. package/dist/cli/index.js.map +1 -0
  187. package/dist/cli/keys.js +32 -0
  188. package/dist/cli/keys.js.map +1 -0
  189. package/dist/cli/utils/client.js +174 -0
  190. package/dist/cli/utils/client.js.map +1 -0
  191. package/dist/cli/utils/options.js +135 -0
  192. package/dist/cli/utils/options.js.map +1 -0
  193. package/dist/node/cli/commands/files/delete.d.ts +40 -0
  194. package/dist/node/cli/commands/files/delete.d.ts.map +1 -0
  195. package/dist/node/cli/commands/files/delete.js +31 -0
  196. package/dist/node/cli/commands/files/delete.js.map +1 -0
  197. package/dist/node/cli/commands/files/download-url.d.ts +40 -0
  198. package/dist/node/cli/commands/files/download-url.d.ts.map +1 -0
  199. package/dist/node/cli/commands/files/download-url.js +31 -0
  200. package/dist/node/cli/commands/files/download-url.js.map +1 -0
  201. package/dist/node/cli/commands/files/download.d.ts +49 -0
  202. package/dist/node/cli/commands/files/download.d.ts.map +1 -0
  203. package/dist/node/cli/commands/files/download.js +65 -0
  204. package/dist/node/cli/commands/files/download.js.map +1 -0
  205. package/dist/node/cli/commands/files/get.d.ts +40 -0
  206. package/dist/node/cli/commands/files/get.d.ts.map +1 -0
  207. package/dist/node/cli/commands/files/get.js +31 -0
  208. package/dist/node/cli/commands/files/get.js.map +1 -0
  209. package/dist/node/cli/commands/files/list.d.ts +56 -0
  210. package/dist/node/cli/commands/files/list.d.ts.map +1 -0
  211. package/dist/node/cli/commands/files/list.js +53 -0
  212. package/dist/node/cli/commands/files/list.js.map +1 -0
  213. package/dist/node/cli/commands/files/update.d.ts +56 -0
  214. package/dist/node/cli/commands/files/update.d.ts.map +1 -0
  215. package/dist/node/cli/commands/files/update.js +53 -0
  216. package/dist/node/cli/commands/files/update.js.map +1 -0
  217. package/dist/node/cli/commands/files/upload.d.ts +73 -0
  218. package/dist/node/cli/commands/files/upload.d.ts.map +1 -0
  219. package/dist/node/cli/commands/files/upload.js +87 -0
  220. package/dist/node/cli/commands/files/upload.js.map +1 -0
  221. package/dist/node/cli/commands/uploads/abort.d.ts +37 -0
  222. package/dist/node/cli/commands/uploads/abort.d.ts.map +1 -0
  223. package/dist/node/cli/commands/uploads/abort.js +26 -0
  224. package/dist/node/cli/commands/uploads/abort.js.map +1 -0
  225. package/dist/node/cli/commands/uploads/complete.d.ts +41 -0
  226. package/dist/node/cli/commands/uploads/complete.d.ts.map +1 -0
  227. package/dist/node/cli/commands/uploads/complete.js +45 -0
  228. package/dist/node/cli/commands/uploads/complete.js.map +1 -0
  229. package/dist/node/cli/commands/uploads/content.d.ts +46 -0
  230. package/dist/node/cli/commands/uploads/content.d.ts.map +1 -0
  231. package/dist/node/cli/commands/uploads/content.js +43 -0
  232. package/dist/node/cli/commands/uploads/content.js.map +1 -0
  233. package/dist/node/cli/commands/uploads/create.d.ts +72 -0
  234. package/dist/node/cli/commands/uploads/create.d.ts.map +1 -0
  235. package/dist/node/cli/commands/uploads/create.js +84 -0
  236. package/dist/node/cli/commands/uploads/create.js.map +1 -0
  237. package/dist/node/cli/commands/uploads/get.d.ts +37 -0
  238. package/dist/node/cli/commands/uploads/get.d.ts.map +1 -0
  239. package/dist/node/cli/commands/uploads/get.js +26 -0
  240. package/dist/node/cli/commands/uploads/get.js.map +1 -0
  241. package/dist/node/cli/commands/uploads/parts-complete.d.ts +41 -0
  242. package/dist/node/cli/commands/uploads/parts-complete.d.ts.map +1 -0
  243. package/dist/node/cli/commands/uploads/parts-complete.js +44 -0
  244. package/dist/node/cli/commands/uploads/parts-complete.js.map +1 -0
  245. package/dist/node/cli/commands/uploads/parts-list.d.ts +37 -0
  246. package/dist/node/cli/commands/uploads/parts-list.d.ts.map +1 -0
  247. package/dist/node/cli/commands/uploads/parts-list.js +26 -0
  248. package/dist/node/cli/commands/uploads/parts-list.js.map +1 -0
  249. package/dist/node/cli/commands/uploads/parts-urls.d.ts +46 -0
  250. package/dist/node/cli/commands/uploads/parts-urls.d.ts.map +1 -0
  251. package/dist/node/cli/commands/uploads/parts-urls.js +57 -0
  252. package/dist/node/cli/commands/uploads/parts-urls.js.map +1 -0
  253. package/dist/node/cli/commands/uploads/progress.d.ts +45 -0
  254. package/dist/node/cli/commands/uploads/progress.d.ts.map +1 -0
  255. package/dist/node/cli/commands/uploads/progress.js +40 -0
  256. package/dist/node/cli/commands/uploads/progress.js.map +1 -0
  257. package/dist/node/cli/commands/uploads/transfer.d.ts +73 -0
  258. package/dist/node/cli/commands/uploads/transfer.d.ts.map +1 -0
  259. package/dist/node/cli/commands/uploads/transfer.js +170 -0
  260. package/dist/node/cli/commands/uploads/transfer.js.map +1 -0
  261. package/dist/node/cli/index.d.ts +27 -0
  262. package/dist/node/cli/index.d.ts.map +1 -0
  263. package/dist/node/cli/index.js +198 -0
  264. package/dist/node/cli/index.js.map +1 -0
  265. package/dist/node/cli/utils/client.js +174 -0
  266. package/dist/node/cli/utils/client.js.map +1 -0
  267. package/dist/node/cli/utils/options.js +135 -0
  268. package/dist/node/cli/utils/options.js.map +1 -0
  269. package/dist/node/client/clients.d.ts +295 -0
  270. package/dist/node/client/clients.d.ts.map +1 -0
  271. package/dist/node/client/clients.js +49 -0
  272. package/dist/node/client/clients.js.map +1 -0
  273. package/dist/node/client/helpers.d.ts +51 -0
  274. package/dist/node/client/helpers.d.ts.map +1 -0
  275. package/dist/node/client/helpers.js +242 -0
  276. package/dist/node/client/helpers.js.map +1 -0
  277. package/dist/node/client/react.d.ts +295 -0
  278. package/dist/node/client/react.d.ts.map +1 -0
  279. package/dist/node/client/react.js +11 -0
  280. package/dist/node/client/react.js.map +1 -0
  281. package/dist/node/client/solid.d.ts +303 -0
  282. package/dist/node/client/solid.d.ts.map +1 -0
  283. package/dist/node/client/solid.js +11 -0
  284. package/dist/node/client/solid.js.map +1 -0
  285. package/dist/node/client/svelte.d.ts +295 -0
  286. package/dist/node/client/svelte.d.ts.map +1 -0
  287. package/dist/node/client/svelte.js +11 -0
  288. package/dist/node/client/svelte.js.map +1 -0
  289. package/dist/node/client/vanilla.d.ts +296 -0
  290. package/dist/node/client/vanilla.d.ts.map +1 -0
  291. package/dist/node/client/vanilla.js +11 -0
  292. package/dist/node/client/vanilla.js.map +1 -0
  293. package/dist/node/client/vue.d.ts +295 -0
  294. package/dist/node/client/vue.d.ts.map +1 -0
  295. package/dist/node/client/vue.js +11 -0
  296. package/dist/node/client/vue.js.map +1 -0
  297. package/dist/node/config.d.ts +41 -0
  298. package/dist/node/config.d.ts.map +1 -0
  299. package/dist/node/config.js +26 -0
  300. package/dist/node/config.js.map +1 -0
  301. package/dist/node/definition.d.ts +829 -0
  302. package/dist/node/definition.d.ts.map +1 -0
  303. package/dist/node/definition.js +59 -0
  304. package/dist/node/definition.js.map +1 -0
  305. package/dist/node/index.d.ts +1246 -0
  306. package/dist/node/index.d.ts.map +1 -0
  307. package/dist/node/index.js +19 -0
  308. package/dist/node/index.js.map +1 -0
  309. package/dist/node/keys.d.ts +12 -0
  310. package/dist/node/keys.d.ts.map +1 -0
  311. package/dist/node/keys.js +63 -0
  312. package/dist/node/keys.js.map +1 -0
  313. package/dist/node/routes/files.js +450 -0
  314. package/dist/node/routes/files.js.map +1 -0
  315. package/dist/node/routes/index.d.ts +2023 -0
  316. package/dist/node/routes/index.d.ts.map +1 -0
  317. package/dist/node/routes/index.js +9 -0
  318. package/dist/node/routes/index.js.map +1 -0
  319. package/dist/node/routes/shared.js +66 -0
  320. package/dist/node/routes/shared.js.map +1 -0
  321. package/dist/node/routes/uploads.js +454 -0
  322. package/dist/node/routes/uploads.js.map +1 -0
  323. package/dist/node/schema.d.ts +14 -0
  324. package/dist/node/schema.d.ts.map +1 -0
  325. package/dist/node/schema.js +30 -0
  326. package/dist/node/schema.js.map +1 -0
  327. package/dist/node/services/files.d.ts +20 -0
  328. package/dist/node/services/files.d.ts.map +1 -0
  329. package/dist/node/services/files.js +93 -0
  330. package/dist/node/services/files.js.map +1 -0
  331. package/dist/node/services/helpers.js +36 -0
  332. package/dist/node/services/helpers.js.map +1 -0
  333. package/dist/node/services/index.js +4 -0
  334. package/dist/node/services/uploads.d.ts +50 -0
  335. package/dist/node/services/uploads.d.ts.map +1 -0
  336. package/dist/node/services/uploads.js +358 -0
  337. package/dist/node/services/uploads.js.map +1 -0
  338. package/dist/node/storage/fs.d.ts +16 -0
  339. package/dist/node/storage/fs.d.ts.map +1 -0
  340. package/dist/node/storage/fs.js +94 -0
  341. package/dist/node/storage/fs.js.map +1 -0
  342. package/dist/node/storage/r2.d.ts +103 -0
  343. package/dist/node/storage/r2.d.ts.map +1 -0
  344. package/dist/node/storage/r2.js +23 -0
  345. package/dist/node/storage/r2.js.map +1 -0
  346. package/dist/node/storage/s3.d.ts +44 -0
  347. package/dist/node/storage/s3.d.ts.map +1 -0
  348. package/dist/node/storage/s3.js +398 -0
  349. package/dist/node/storage/s3.js.map +1 -0
  350. package/dist/node/storage/types.d.ts +118 -0
  351. package/dist/node/storage/types.d.ts.map +1 -0
  352. package/dist/node/types.d.ts +32 -0
  353. package/dist/node/types.d.ts.map +1 -0
  354. package/dist/tsconfig.tsbuildinfo +1 -0
  355. package/package.json +105 -0
@@ -0,0 +1,120 @@
1
+ import { atom } from "../../../../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/atom/index.js";
2
+ import { isGetHook, isMutatorHook, isStore } from "./client.js";
3
+ import { get, writable } from "svelte/store";
4
+ import { onDestroy } from "svelte";
5
+
6
+ //#region ../fragno/dist/client/client.svelte.js
7
+ function isReadable(value) {
8
+ return typeof value === "object" && value !== null && "subscribe" in value;
9
+ }
10
+ function isCallable(value) {
11
+ return typeof value === "function";
12
+ }
13
+ function readableToAtom(value) {
14
+ const a = /* @__PURE__ */ atom(get(value));
15
+ value.subscribe((newVal) => {
16
+ a.set(newVal);
17
+ });
18
+ return a;
19
+ }
20
+ function runeToAtom(value) {
21
+ const a = /* @__PURE__ */ atom(value());
22
+ $effect(() => {
23
+ a.set(value());
24
+ });
25
+ return a;
26
+ }
27
+ function createSvelteHook(hook) {
28
+ return ({ path, query } = {}) => {
29
+ const pathParams = {};
30
+ const queryParams = {};
31
+ for (const [key, value] of Object.entries(path ?? {})) {
32
+ const v = value;
33
+ if (isCallable(v)) pathParams[key] = runeToAtom(v);
34
+ else pathParams[key] = isReadable(v) ? readableToAtom(v) : v;
35
+ }
36
+ for (const [key, value] of Object.entries(query ?? {})) {
37
+ const v = value;
38
+ if (isCallable(v)) queryParams[key] = runeToAtom(v);
39
+ else queryParams[key] = isReadable(v) ? readableToAtom(v) : v;
40
+ }
41
+ const store = hook.store({
42
+ path: pathParams,
43
+ query: queryParams
44
+ });
45
+ const data = writable(void 0);
46
+ const loading = writable(false);
47
+ const error = writable(void 0);
48
+ const unsubscribe = store.subscribe((updatedStoreValue) => {
49
+ data.set(updatedStoreValue.data);
50
+ loading.set(updatedStoreValue.loading);
51
+ error.set(updatedStoreValue.error);
52
+ });
53
+ onDestroy(() => {
54
+ unsubscribe();
55
+ });
56
+ return {
57
+ data,
58
+ loading,
59
+ error
60
+ };
61
+ };
62
+ }
63
+ function createSvelteMutator(hook) {
64
+ return () => {
65
+ const data = writable(void 0);
66
+ const loading = writable(void 0);
67
+ const error = writable(void 0);
68
+ const unsubscribe = hook.mutatorStore.subscribe((storeValue) => {
69
+ data.set(storeValue.data);
70
+ loading.set(storeValue.loading);
71
+ error.set(storeValue.error);
72
+ });
73
+ onDestroy(() => {
74
+ unsubscribe();
75
+ });
76
+ const mutate = async (args) => {
77
+ const { body, path, query } = args;
78
+ const pathParams = {};
79
+ const queryParams = {};
80
+ for (const [key, value] of Object.entries(path ?? {})) {
81
+ const v = value;
82
+ pathParams[key] = isReadable(v) ? readableToAtom(v) : v;
83
+ }
84
+ for (const [key, value] of Object.entries(query ?? {})) {
85
+ const v = value;
86
+ queryParams[key] = isReadable(v) ? readableToAtom(v) : v;
87
+ }
88
+ return hook.mutatorStore.mutate({
89
+ body,
90
+ path: pathParams,
91
+ query: queryParams
92
+ });
93
+ };
94
+ return {
95
+ mutate,
96
+ loading,
97
+ error,
98
+ data
99
+ };
100
+ };
101
+ }
102
+ function createSvelteStore(hook) {
103
+ return hook.obj;
104
+ }
105
+ function useFragno(clientObj) {
106
+ const result = {};
107
+ for (const key in clientObj) {
108
+ if (!Object.prototype.hasOwnProperty.call(clientObj, key)) continue;
109
+ const hook = clientObj[key];
110
+ if (isGetHook(hook)) result[key] = createSvelteHook(hook);
111
+ else if (isMutatorHook(hook)) result[key] = createSvelteMutator(hook);
112
+ else if (isStore(hook)) result[key] = createSvelteStore(hook);
113
+ else result[key] = hook;
114
+ }
115
+ return result;
116
+ }
117
+
118
+ //#endregion
119
+ export { useFragno };
120
+ //# sourceMappingURL=client.svelte.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.svelte.js","names":["isGetHook","isMutatorHook","isStore","atom","get","writable","onDestroy","isReadable","value","isCallable","readableToAtom","a","subscribe","newVal","set","runeToAtom","$effect","createSvelteHook","hook","path","query","pathParams","queryParams","key","Object","entries","v","store","data","loading","error","unsubscribe","updatedStoreValue","createSvelteMutator","mutatorStore","storeValue","mutate","args","body","createSvelteStore","obj","useFragno","clientObj","result","prototype","hasOwnProperty","call"],"sources":["../../../../../../../../fragno/dist/client/client.svelte.js"],"sourcesContent":["import { isGetHook, isMutatorHook, isStore } from \"./client.js\";\nimport { atom } from \"nanostores\";\nimport { get, writable } from \"svelte/store\";\nimport { onDestroy } from \"svelte\";\n\n//#region src/client/client.svelte.ts\nfunction isReadable(value) {\n\treturn typeof value === \"object\" && value !== null && \"subscribe\" in value;\n}\nfunction isCallable(value) {\n\treturn typeof value === \"function\";\n}\nfunction readableToAtom(value) {\n\tconst a = atom(get(value));\n\tvalue.subscribe((newVal) => {\n\t\ta.set(newVal);\n\t});\n\treturn a;\n}\nfunction runeToAtom(value) {\n\tconst a = atom(value());\n\t$effect(() => {\n\t\ta.set(value());\n\t});\n\treturn a;\n}\nfunction createSvelteHook(hook) {\n\treturn ({ path, query } = {}) => {\n\t\tconst pathParams = {};\n\t\tconst queryParams = {};\n\t\tfor (const [key, value] of Object.entries(path ?? {})) {\n\t\t\tconst v = value;\n\t\t\tif (isCallable(v)) pathParams[key] = runeToAtom(v);\n\t\t\telse pathParams[key] = isReadable(v) ? readableToAtom(v) : v;\n\t\t}\n\t\tfor (const [key, value] of Object.entries(query ?? {})) {\n\t\t\tconst v = value;\n\t\t\tif (isCallable(v)) queryParams[key] = runeToAtom(v);\n\t\t\telse queryParams[key] = isReadable(v) ? readableToAtom(v) : v;\n\t\t}\n\t\tconst store = hook.store({\n\t\t\tpath: pathParams,\n\t\t\tquery: queryParams\n\t\t});\n\t\tconst data = writable(void 0);\n\t\tconst loading = writable(false);\n\t\tconst error = writable(void 0);\n\t\tconst unsubscribe = store.subscribe((updatedStoreValue) => {\n\t\t\tdata.set(updatedStoreValue.data);\n\t\t\tloading.set(updatedStoreValue.loading);\n\t\t\terror.set(updatedStoreValue.error);\n\t\t});\n\t\tonDestroy(() => {\n\t\t\tunsubscribe();\n\t\t});\n\t\treturn {\n\t\t\tdata,\n\t\t\tloading,\n\t\t\terror\n\t\t};\n\t};\n}\nfunction createSvelteMutator(hook) {\n\treturn () => {\n\t\tconst data = writable(void 0);\n\t\tconst loading = writable(void 0);\n\t\tconst error = writable(void 0);\n\t\tconst unsubscribe = hook.mutatorStore.subscribe((storeValue) => {\n\t\t\tdata.set(storeValue.data);\n\t\t\tloading.set(storeValue.loading);\n\t\t\terror.set(storeValue.error);\n\t\t});\n\t\tonDestroy(() => {\n\t\t\tunsubscribe();\n\t\t});\n\t\tconst mutate = async (args) => {\n\t\t\tconst { body, path, query } = args;\n\t\t\tconst pathParams = {};\n\t\t\tconst queryParams = {};\n\t\t\tfor (const [key, value] of Object.entries(path ?? {})) {\n\t\t\t\tconst v = value;\n\t\t\t\tpathParams[key] = isReadable(v) ? readableToAtom(v) : v;\n\t\t\t}\n\t\t\tfor (const [key, value] of Object.entries(query ?? {})) {\n\t\t\t\tconst v = value;\n\t\t\t\tqueryParams[key] = isReadable(v) ? readableToAtom(v) : v;\n\t\t\t}\n\t\t\treturn hook.mutatorStore.mutate({\n\t\t\t\tbody,\n\t\t\t\tpath: pathParams,\n\t\t\t\tquery: queryParams\n\t\t\t});\n\t\t};\n\t\treturn {\n\t\t\tmutate,\n\t\t\tloading,\n\t\t\terror,\n\t\t\tdata\n\t\t};\n\t};\n}\nfunction createSvelteStore(hook) {\n\treturn hook.obj;\n}\nfunction useFragno(clientObj) {\n\tconst result = {};\n\tfor (const key in clientObj) {\n\t\tif (!Object.prototype.hasOwnProperty.call(clientObj, key)) continue;\n\t\tconst hook = clientObj[key];\n\t\tif (isGetHook(hook)) result[key] = createSvelteHook(hook);\n\t\telse if (isMutatorHook(hook)) result[key] = createSvelteMutator(hook);\n\t\telse if (isStore(hook)) result[key] = createSvelteStore(hook);\n\t\telse result[key] = hook;\n\t}\n\treturn result;\n}\n\n//#endregion\nexport { createSvelteStore, readableToAtom, runeToAtom, useFragno };\n//# sourceMappingURL=client.svelte.js.map"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ //#region ../fragno/dist/client/internal/fetcher-merge.js
2
+ /**
3
+ * Merge two fetcher configurations, with user config taking precedence.
4
+ * If user provides a custom function, it takes full precedence.
5
+ * Otherwise, deep merge RequestInit options.
6
+ */
7
+ function mergeFetcherConfigs(authorConfig, userConfig) {
8
+ if (userConfig?.type === "function") return userConfig;
9
+ if (!userConfig && authorConfig?.type === "function") return authorConfig;
10
+ const authorOpts = authorConfig?.type === "options" ? authorConfig.options : {};
11
+ const userOpts = userConfig?.type === "options" ? userConfig.options : {};
12
+ if (Object.keys(authorOpts).length === 0 && Object.keys(userOpts).length === 0) return;
13
+ return {
14
+ type: "options",
15
+ options: {
16
+ ...authorOpts,
17
+ ...userOpts,
18
+ headers: mergeHeaders(authorOpts.headers, userOpts.headers)
19
+ }
20
+ };
21
+ }
22
+ /**
23
+ * Merge headers from author and user configs.
24
+ * User headers override author headers.
25
+ */
26
+ function mergeHeaders(author, user) {
27
+ if (!author && !user) return;
28
+ const merged = new Headers(author);
29
+ new Headers(user).forEach((value, key) => merged.set(key, value));
30
+ if (merged.keys().next().done) return;
31
+ return merged;
32
+ }
33
+
34
+ //#endregion
35
+ export { mergeFetcherConfigs };
36
+ //# sourceMappingURL=fetcher-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetcher-merge.js","names":["mergeFetcherConfigs","authorConfig","userConfig","type","authorOpts","options","userOpts","Object","keys","length","headers","mergeHeaders","author","user","merged","Headers","forEach","value","key","set","next","done"],"sources":["../../../../../../../../../fragno/dist/client/internal/fetcher-merge.js"],"sourcesContent":["//#region src/client/internal/fetcher-merge.ts\n/**\n* Merge two fetcher configurations, with user config taking precedence.\n* If user provides a custom function, it takes full precedence.\n* Otherwise, deep merge RequestInit options.\n*/\nfunction mergeFetcherConfigs(authorConfig, userConfig) {\n\tif (userConfig?.type === \"function\") return userConfig;\n\tif (!userConfig && authorConfig?.type === \"function\") return authorConfig;\n\tconst authorOpts = authorConfig?.type === \"options\" ? authorConfig.options : {};\n\tconst userOpts = userConfig?.type === \"options\" ? userConfig.options : {};\n\tif (Object.keys(authorOpts).length === 0 && Object.keys(userOpts).length === 0) return;\n\treturn {\n\t\ttype: \"options\",\n\t\toptions: {\n\t\t\t...authorOpts,\n\t\t\t...userOpts,\n\t\t\theaders: mergeHeaders(authorOpts.headers, userOpts.headers)\n\t\t}\n\t};\n}\n/**\n* Merge headers from author and user configs.\n* User headers override author headers.\n*/\nfunction mergeHeaders(author, user) {\n\tif (!author && !user) return;\n\tconst merged = new Headers(author);\n\tnew Headers(user).forEach((value, key) => merged.set(key, value));\n\tif (merged.keys().next().done) return;\n\treturn merged;\n}\n\n//#endregion\nexport { mergeFetcherConfigs };\n//# sourceMappingURL=fetcher-merge.js.map"],"mappings":";;;;;;AAMA,SAASA,oBAAoBC,cAAcC,YAAY;AACtD,KAAIA,YAAYC,SAAS,WAAY,QAAOD;AAC5C,KAAI,CAACA,cAAcD,cAAcE,SAAS,WAAY,QAAOF;CAC7D,MAAMG,aAAaH,cAAcE,SAAS,YAAYF,aAAaI,UAAU,EAAE;CAC/E,MAAMC,WAAWJ,YAAYC,SAAS,YAAYD,WAAWG,UAAU,EAAE;AACzE,KAAIE,OAAOC,KAAKJ,WAAW,CAACK,WAAW,KAAKF,OAAOC,KAAKF,SAAS,CAACG,WAAW,EAAG;AAChF,QAAO;EACNN,MAAM;EACNE,SAAS;GACR,GAAGD;GACH,GAAGE;GACHI,SAASC,aAAaP,WAAWM,SAASJ,SAASI,QAAO;GAC3D;EACA;;;;;;AAMF,SAASC,aAAaC,QAAQC,MAAM;AACnC,KAAI,CAACD,UAAU,CAACC,KAAM;CACtB,MAAMC,SAAS,IAAIC,QAAQH,OAAO;AAClC,KAAIG,QAAQF,KAAK,CAACG,SAASC,OAAOC,QAAQJ,OAAOK,IAAID,KAAKD,MAAM,CAAC;AACjE,KAAIH,OAAON,MAAM,CAACY,MAAM,CAACC,KAAM;AAC/B,QAAOP"}
@@ -0,0 +1,139 @@
1
+ import { FragnoClientError, FragnoClientFetchAbortError, FragnoClientFetchError, FragnoClientUnknownApiError } from "../client-error.js";
2
+
3
+ //#region ../fragno/dist/client/internal/ndjson-streaming.js
4
+ /**
5
+ * Creates a promise that rejects when the abort signal is triggered
6
+ */
7
+ function createAbortPromise(abortSignal) {
8
+ return new Promise((_, reject) => {
9
+ const abortHandler = () => {
10
+ reject(new FragnoClientFetchAbortError("Operation was aborted"));
11
+ };
12
+ if (abortSignal.aborted) abortHandler();
13
+ else abortSignal.addEventListener("abort", abortHandler, { once: true });
14
+ });
15
+ }
16
+ /**
17
+ * Handles NDJSON streaming responses by returning the first item from the fetcher
18
+ * and then continuing to stream updates via the store's mutate method.
19
+ *
20
+ * This makes it so that we can wait until the first chunk before updating the store, if we did
21
+ * not do this, `loading` would briefly be false before the first item would be populated in the
22
+ * result.
23
+ *
24
+ * @param response - The fetch Response object containing the NDJSON stream
25
+ * @param store - The fetcher store to update with streaming data
26
+ * @param abortSignal - Optional AbortSignal to cancel the streaming operation
27
+ * @returns A promise that resolves to an object containing the first item and a streaming promise
28
+ */
29
+ async function handleNdjsonStreamingFirstItem(response, store, options = {}) {
30
+ if (!response.body) throw new FragnoClientFetchError("Streaming response has no body", "NO_BODY");
31
+ const { abortSignal } = options;
32
+ if (abortSignal?.aborted) throw new FragnoClientFetchAbortError("Operation was aborted");
33
+ const decoder = new TextDecoder();
34
+ const reader = response.body.getReader();
35
+ let buffer = "";
36
+ let firstItem = null;
37
+ const items = [];
38
+ try {
39
+ while (firstItem === null) {
40
+ if (abortSignal?.aborted) {
41
+ reader.releaseLock();
42
+ throw new FragnoClientFetchAbortError("Operation was aborted");
43
+ }
44
+ const { done, value } = await (abortSignal ? Promise.race([reader.read(), createAbortPromise(abortSignal)]) : reader.read());
45
+ if (done) break;
46
+ buffer += decoder.decode(value, { stream: true });
47
+ const lines = buffer.split("\n");
48
+ buffer = lines.pop() || "";
49
+ for (const line of lines) {
50
+ if (!line.trim()) continue;
51
+ try {
52
+ const jsonObject = JSON.parse(line);
53
+ items.push(jsonObject);
54
+ if (firstItem === null) {
55
+ firstItem = jsonObject;
56
+ const streamingPromise = continueStreaming(reader, decoder, buffer, items, store, abortSignal);
57
+ return {
58
+ firstItem,
59
+ streamingPromise
60
+ };
61
+ }
62
+ } catch (parseError) {
63
+ throw new FragnoClientUnknownApiError("Failed to parse NDJSON line", 500, { cause: parseError });
64
+ }
65
+ }
66
+ }
67
+ if (firstItem === null) {
68
+ reader.releaseLock();
69
+ throw new FragnoClientUnknownApiError("NDJSON stream contained no valid items", 500);
70
+ }
71
+ reader.releaseLock();
72
+ throw new FragnoClientFetchError("Unexpected end of stream processing", "NO_BODY");
73
+ } catch (error) {
74
+ if (error instanceof FragnoClientError) {
75
+ store?.setError(error);
76
+ throw error;
77
+ } else {
78
+ const clientError = new FragnoClientUnknownApiError("Unknown streaming error", 500, { cause: error });
79
+ store?.setError(clientError);
80
+ throw clientError;
81
+ }
82
+ }
83
+ }
84
+ /**
85
+ * Continues streaming the remaining items in the background
86
+ */
87
+ async function continueStreaming(reader, decoder, initialBuffer, items, store, abortSignal) {
88
+ let buffer = initialBuffer;
89
+ try {
90
+ while (true) {
91
+ if (abortSignal?.aborted) throw new FragnoClientFetchAbortError("Operation was aborted");
92
+ const { done, value } = await (abortSignal ? Promise.race([reader.read(), createAbortPromise(abortSignal)]) : reader.read());
93
+ if (done) {
94
+ if (buffer.trim()) {
95
+ const lines$1 = buffer.split("\n");
96
+ for (const line of lines$1) {
97
+ if (!line.trim()) continue;
98
+ try {
99
+ const jsonObject = JSON.parse(line);
100
+ items.push(jsonObject);
101
+ store?.setData([...items]);
102
+ } catch (parseError) {
103
+ throw new FragnoClientUnknownApiError("Failed to parse NDJSON line", 400, { cause: parseError });
104
+ }
105
+ }
106
+ }
107
+ break;
108
+ }
109
+ buffer += decoder.decode(value, { stream: true });
110
+ const lines = buffer.split("\n");
111
+ buffer = lines.pop() || "";
112
+ for (const line of lines) {
113
+ if (!line.trim()) continue;
114
+ try {
115
+ const jsonObject = JSON.parse(line);
116
+ items.push(jsonObject);
117
+ store?.setData([...items]);
118
+ } catch (parseError) {
119
+ throw new FragnoClientUnknownApiError("Failed to parse NDJSON line", 400, { cause: parseError });
120
+ }
121
+ }
122
+ }
123
+ } catch (error) {
124
+ if (error instanceof FragnoClientError) store?.setError(error);
125
+ else {
126
+ const clientError = new FragnoClientUnknownApiError("Unknown streaming error", 400, { cause: error });
127
+ store?.setError(clientError);
128
+ throw clientError;
129
+ }
130
+ throw error;
131
+ } finally {
132
+ reader.releaseLock();
133
+ }
134
+ return items;
135
+ }
136
+
137
+ //#endregion
138
+ export { handleNdjsonStreamingFirstItem };
139
+ //# sourceMappingURL=ndjson-streaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ndjson-streaming.js","names":["FragnoClientError","FragnoClientFetchAbortError","FragnoClientFetchError","FragnoClientUnknownApiError","createAbortPromise","abortSignal","Promise","_","reject","abortHandler","aborted","addEventListener","once","handleNdjsonStreamingFirstItem","response","store","options","body","decoder","TextDecoder","reader","getReader","buffer","firstItem","items","releaseLock","done","value","race","read","decode","stream","lines","split","pop","line","trim","jsonObject","JSON","parse","push","streamingPromise","continueStreaming","parseError","cause","error","setError","clientError","initialBuffer","lines$1","setData"],"sources":["../../../../../../../../../fragno/dist/client/internal/ndjson-streaming.js"],"sourcesContent":["import { FragnoClientError, FragnoClientFetchAbortError, FragnoClientFetchError, FragnoClientUnknownApiError } from \"../client-error.js\";\n\n//#region src/client/internal/ndjson-streaming.ts\n/**\n* Creates a promise that rejects when the abort signal is triggered\n*/\nfunction createAbortPromise(abortSignal) {\n\treturn new Promise((_, reject) => {\n\t\tconst abortHandler = () => {\n\t\t\treject(new FragnoClientFetchAbortError(\"Operation was aborted\"));\n\t\t};\n\t\tif (abortSignal.aborted) abortHandler();\n\t\telse abortSignal.addEventListener(\"abort\", abortHandler, { once: true });\n\t});\n}\n/**\n* Handles NDJSON streaming responses by returning the first item from the fetcher\n* and then continuing to stream updates via the store's mutate method.\n*\n* This makes it so that we can wait until the first chunk before updating the store, if we did\n* not do this, `loading` would briefly be false before the first item would be populated in the\n* result.\n*\n* @param response - The fetch Response object containing the NDJSON stream\n* @param store - The fetcher store to update with streaming data\n* @param abortSignal - Optional AbortSignal to cancel the streaming operation\n* @returns A promise that resolves to an object containing the first item and a streaming promise\n*/\nasync function handleNdjsonStreamingFirstItem(response, store, options = {}) {\n\tif (!response.body) throw new FragnoClientFetchError(\"Streaming response has no body\", \"NO_BODY\");\n\tconst { abortSignal } = options;\n\tif (abortSignal?.aborted) throw new FragnoClientFetchAbortError(\"Operation was aborted\");\n\tconst decoder = new TextDecoder();\n\tconst reader = response.body.getReader();\n\tlet buffer = \"\";\n\tlet firstItem = null;\n\tconst items = [];\n\ttry {\n\t\twhile (firstItem === null) {\n\t\t\tif (abortSignal?.aborted) {\n\t\t\t\treader.releaseLock();\n\t\t\t\tthrow new FragnoClientFetchAbortError(\"Operation was aborted\");\n\t\t\t}\n\t\t\tconst { done, value } = await (abortSignal ? Promise.race([reader.read(), createAbortPromise(abortSignal)]) : reader.read());\n\t\t\tif (done) break;\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\tbuffer = lines.pop() || \"\";\n\t\t\tfor (const line of lines) {\n\t\t\t\tif (!line.trim()) continue;\n\t\t\t\ttry {\n\t\t\t\t\tconst jsonObject = JSON.parse(line);\n\t\t\t\t\titems.push(jsonObject);\n\t\t\t\t\tif (firstItem === null) {\n\t\t\t\t\t\tfirstItem = jsonObject;\n\t\t\t\t\t\tconst streamingPromise = continueStreaming(reader, decoder, buffer, items, store, abortSignal);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tfirstItem,\n\t\t\t\t\t\t\tstreamingPromise\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} catch (parseError) {\n\t\t\t\t\tthrow new FragnoClientUnknownApiError(\"Failed to parse NDJSON line\", 500, { cause: parseError });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (firstItem === null) {\n\t\t\treader.releaseLock();\n\t\t\tthrow new FragnoClientUnknownApiError(\"NDJSON stream contained no valid items\", 500);\n\t\t}\n\t\treader.releaseLock();\n\t\tthrow new FragnoClientFetchError(\"Unexpected end of stream processing\", \"NO_BODY\");\n\t} catch (error) {\n\t\tif (error instanceof FragnoClientError) {\n\t\t\tstore?.setError(error);\n\t\t\tthrow error;\n\t\t} else {\n\t\t\tconst clientError = new FragnoClientUnknownApiError(\"Unknown streaming error\", 500, { cause: error });\n\t\t\tstore?.setError(clientError);\n\t\t\tthrow clientError;\n\t\t}\n\t}\n}\n/**\n* Continues streaming the remaining items in the background\n*/\nasync function continueStreaming(reader, decoder, initialBuffer, items, store, abortSignal) {\n\tlet buffer = initialBuffer;\n\ttry {\n\t\twhile (true) {\n\t\t\tif (abortSignal?.aborted) throw new FragnoClientFetchAbortError(\"Operation was aborted\");\n\t\t\tconst { done, value } = await (abortSignal ? Promise.race([reader.read(), createAbortPromise(abortSignal)]) : reader.read());\n\t\t\tif (done) {\n\t\t\t\tif (buffer.trim()) {\n\t\t\t\t\tconst lines$1 = buffer.split(\"\\n\");\n\t\t\t\t\tfor (const line of lines$1) {\n\t\t\t\t\t\tif (!line.trim()) continue;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst jsonObject = JSON.parse(line);\n\t\t\t\t\t\t\titems.push(jsonObject);\n\t\t\t\t\t\t\tstore?.setData([...items]);\n\t\t\t\t\t\t} catch (parseError) {\n\t\t\t\t\t\t\tthrow new FragnoClientUnknownApiError(\"Failed to parse NDJSON line\", 400, { cause: parseError });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\tbuffer = lines.pop() || \"\";\n\t\t\tfor (const line of lines) {\n\t\t\t\tif (!line.trim()) continue;\n\t\t\t\ttry {\n\t\t\t\t\tconst jsonObject = JSON.parse(line);\n\t\t\t\t\titems.push(jsonObject);\n\t\t\t\t\tstore?.setData([...items]);\n\t\t\t\t} catch (parseError) {\n\t\t\t\t\tthrow new FragnoClientUnknownApiError(\"Failed to parse NDJSON line\", 400, { cause: parseError });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tif (error instanceof FragnoClientError) store?.setError(error);\n\t\telse {\n\t\t\tconst clientError = new FragnoClientUnknownApiError(\"Unknown streaming error\", 400, { cause: error });\n\t\t\tstore?.setError(clientError);\n\t\t\tthrow clientError;\n\t\t}\n\t\tthrow error;\n\t} finally {\n\t\treader.releaseLock();\n\t}\n\treturn items;\n}\n\n//#endregion\nexport { handleNdjsonStreamingFirstItem };\n//# sourceMappingURL=ndjson-streaming.js.map"],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { listenKeys } from "../../../../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/listen-keys/index.js";
2
+ import { isReadableAtom } from "../util/nanostores.js";
3
+ import { isGetHook, isMutatorHook, isStore } from "./client.js";
4
+ import { useCallback, useMemo, useRef, useSyncExternalStore } from "react";
5
+
6
+ //#region ../fragno/dist/client/react.js
7
+ function createReactHook(hook) {
8
+ return ({ path, query } = {}) => {
9
+ const pathParamValues = path ? Object.values(path) : [];
10
+ const queryParamValues = query ? Object.values(query) : [];
11
+ const store = useMemo(() => hook.store({
12
+ path,
13
+ query
14
+ }), [hook, ...[...pathParamValues, ...queryParamValues]]);
15
+ if (typeof window === "undefined") return store.get();
16
+ return useStore(store);
17
+ };
18
+ }
19
+ function createReactMutator(hook) {
20
+ return () => {
21
+ return useStore(useMemo(() => hook.mutatorStore, [hook]));
22
+ };
23
+ }
24
+ function createReactStore(hook) {
25
+ if (isReadableAtom(hook.obj)) return () => useStore(hook.obj);
26
+ return () => {
27
+ const result = {};
28
+ for (const key in hook.obj) {
29
+ if (!Object.prototype.hasOwnProperty.call(hook.obj, key)) continue;
30
+ const value = hook.obj[key];
31
+ if (isReadableAtom(value)) result[key] = useStore(value);
32
+ else result[key] = value;
33
+ }
34
+ return result;
35
+ };
36
+ }
37
+ function useFragno(clientObj) {
38
+ const result = {};
39
+ for (const key in clientObj) {
40
+ if (!Object.prototype.hasOwnProperty.call(clientObj, key)) continue;
41
+ const hook = clientObj[key];
42
+ if (isGetHook(hook)) result[key] = createReactHook(hook);
43
+ else if (isMutatorHook(hook)) result[key] = createReactMutator(hook);
44
+ else if (isStore(hook)) result[key] = createReactStore(hook);
45
+ else result[key] = hook;
46
+ }
47
+ return result;
48
+ }
49
+ function useStore(store, options = {}) {
50
+ const snapshotRef = useRef(store.get());
51
+ const { keys, deps = [store, keys] } = options;
52
+ const subscribe = useCallback((onChange) => {
53
+ const emitChange = (value) => {
54
+ if (snapshotRef.current === value) return;
55
+ snapshotRef.current = value;
56
+ onChange();
57
+ };
58
+ emitChange(store.value);
59
+ if (keys?.length) return listenKeys(store, keys, emitChange);
60
+ return store.listen(emitChange);
61
+ }, deps);
62
+ const get = () => snapshotRef.current;
63
+ return useSyncExternalStore(subscribe, get, () => {
64
+ return get();
65
+ });
66
+ }
67
+
68
+ //#endregion
69
+ export { useFragno };
70
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.js","names":["hydrateFromWindow","isReadableAtom","isGetHook","isMutatorHook","isStore","listenKeys","useCallback","useMemo","useRef","useSyncExternalStore","createReactHook","hook","path","query","pathParamValues","Object","values","queryParamValues","store","window","get","useStore","createReactMutator","mutatorStore","createReactStore","obj","result","key","prototype","hasOwnProperty","call","value","useFragno","clientObj","options","snapshotRef","keys","deps","subscribe","onChange","emitChange","current","length","listen","FragnoHydrator","children"],"sources":["../../../../../../../../fragno/dist/client/react.js"],"sourcesContent":["import { hydrateFromWindow } from \"../util/ssr.js\";\nimport { isReadableAtom } from \"../util/nanostores.js\";\nimport { isGetHook, isMutatorHook, isStore } from \"./client.js\";\nimport { listenKeys } from \"nanostores\";\nimport { useCallback, useMemo, useRef, useSyncExternalStore } from \"react\";\n\n//#region src/client/react.ts\nfunction createReactHook(hook) {\n\treturn ({ path, query } = {}) => {\n\t\tconst pathParamValues = path ? Object.values(path) : [];\n\t\tconst queryParamValues = query ? Object.values(query) : [];\n\t\tconst store = useMemo(() => hook.store({\n\t\t\tpath,\n\t\t\tquery\n\t\t}), [hook, ...[...pathParamValues, ...queryParamValues]]);\n\t\tif (typeof window === \"undefined\") return store.get();\n\t\treturn useStore(store);\n\t};\n}\nfunction createReactMutator(hook) {\n\treturn () => {\n\t\treturn useStore(useMemo(() => hook.mutatorStore, [hook]));\n\t};\n}\nfunction createReactStore(hook) {\n\tif (isReadableAtom(hook.obj)) return () => useStore(hook.obj);\n\treturn () => {\n\t\tconst result = {};\n\t\tfor (const key in hook.obj) {\n\t\t\tif (!Object.prototype.hasOwnProperty.call(hook.obj, key)) continue;\n\t\t\tconst value = hook.obj[key];\n\t\t\tif (isReadableAtom(value)) result[key] = useStore(value);\n\t\t\telse result[key] = value;\n\t\t}\n\t\treturn result;\n\t};\n}\nfunction useFragno(clientObj) {\n\tconst result = {};\n\tfor (const key in clientObj) {\n\t\tif (!Object.prototype.hasOwnProperty.call(clientObj, key)) continue;\n\t\tconst hook = clientObj[key];\n\t\tif (isGetHook(hook)) result[key] = createReactHook(hook);\n\t\telse if (isMutatorHook(hook)) result[key] = createReactMutator(hook);\n\t\telse if (isStore(hook)) result[key] = createReactStore(hook);\n\t\telse result[key] = hook;\n\t}\n\treturn result;\n}\nfunction useStore(store, options = {}) {\n\tconst snapshotRef = useRef(store.get());\n\tconst { keys, deps = [store, keys] } = options;\n\tconst subscribe = useCallback((onChange) => {\n\t\tconst emitChange = (value) => {\n\t\t\tif (snapshotRef.current === value) return;\n\t\t\tsnapshotRef.current = value;\n\t\t\tonChange();\n\t\t};\n\t\temitChange(store.value);\n\t\tif (keys?.length) return listenKeys(store, keys, emitChange);\n\t\treturn store.listen(emitChange);\n\t}, deps);\n\tconst get = () => snapshotRef.current;\n\treturn useSyncExternalStore(subscribe, get, () => {\n\t\treturn get();\n\t});\n}\nfunction FragnoHydrator({ children }) {\n\tuseMemo(() => {\n\t\thydrateFromWindow();\n\t}, []);\n\treturn children;\n}\n\n//#endregion\nexport { FragnoHydrator, useFragno, useStore };\n//# sourceMappingURL=react.js.map"],"mappings":";;;;;;AAOA,SAASU,gBAAgBC,MAAM;AAC9B,SAAQ,EAAEC,MAAMC,UAAU,EAAE,KAAK;EAChC,MAAMC,kBAAkBF,OAAOG,OAAOC,OAAOJ,KAAK,GAAG,EAAE;EACvD,MAAMK,mBAAmBJ,QAAQE,OAAOC,OAAOH,MAAM,GAAG,EAAE;EAC1D,MAAMK,QAAQX,cAAcI,KAAKO,MAAM;GACtCN;GACAC;GACA,CAAC,EAAE,CAACF,MAAM,GAAG,CAAC,GAAGG,iBAAiB,GAAGG,iBAAiB,CAAC,CAAC;AACzD,MAAI,OAAOE,WAAW,YAAa,QAAOD,MAAME,KAAK;AACrD,SAAOC,SAASH,MAAM;;;AAGxB,SAASI,mBAAmBX,MAAM;AACjC,cAAa;AACZ,SAAOU,SAASd,cAAcI,KAAKY,cAAc,CAACZ,KAAK,CAAC,CAAC;;;AAG3D,SAASa,iBAAiBb,MAAM;AAC/B,KAAIV,eAAeU,KAAKc,IAAI,CAAE,cAAaJ,SAASV,KAAKc,IAAI;AAC7D,cAAa;EACZ,MAAMC,SAAS,EAAE;AACjB,OAAK,MAAMC,OAAOhB,KAAKc,KAAK;AAC3B,OAAI,CAACV,OAAOa,UAAUC,eAAeC,KAAKnB,KAAKc,KAAKE,IAAI,CAAE;GAC1D,MAAMI,QAAQpB,KAAKc,IAAIE;AACvB,OAAI1B,eAAe8B,MAAM,CAAEL,QAAOC,OAAON,SAASU,MAAM;OACnDL,QAAOC,OAAOI;;AAEpB,SAAOL;;;AAGT,SAASM,UAAUC,WAAW;CAC7B,MAAMP,SAAS,EAAE;AACjB,MAAK,MAAMC,OAAOM,WAAW;AAC5B,MAAI,CAAClB,OAAOa,UAAUC,eAAeC,KAAKG,WAAWN,IAAI,CAAE;EAC3D,MAAMhB,OAAOsB,UAAUN;AACvB,MAAIzB,UAAUS,KAAK,CAAEe,QAAOC,OAAOjB,gBAAgBC,KAAK;WAC/CR,cAAcQ,KAAK,CAAEe,QAAOC,OAAOL,mBAAmBX,KAAK;WAC3DP,QAAQO,KAAK,CAAEe,QAAOC,OAAOH,iBAAiBb,KAAK;MACvDe,QAAOC,OAAOhB;;AAEpB,QAAOe;;AAER,SAASL,SAASH,OAAOgB,UAAU,EAAE,EAAE;CACtC,MAAMC,cAAc3B,OAAOU,MAAME,KAAK,CAAC;CACvC,MAAM,EAAEgB,MAAMC,OAAO,CAACnB,OAAOkB,KAAI,KAAMF;CACvC,MAAMI,YAAYhC,aAAaiC,aAAa;EAC3C,MAAMC,cAAcT,UAAU;AAC7B,OAAII,YAAYM,YAAYV,MAAO;AACnCI,eAAYM,UAAUV;AACtBQ,aAAU;;AAEXC,aAAWtB,MAAMa,MAAM;AACvB,MAAIK,MAAMM,OAAQ,QAAOrC,WAAWa,OAAOkB,MAAMI,WAAW;AAC5D,SAAOtB,MAAMyB,OAAOH,WAAW;IAC7BH,KAAK;CACR,MAAMjB,YAAYe,YAAYM;AAC9B,QAAOhC,qBAAqB6B,WAAWlB,WAAW;AACjD,SAAOA,KAAK;GACX"}
@@ -0,0 +1,108 @@
1
+ import { atom } from "../../../../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/atom/index.js";
2
+ import { isReadableAtom } from "../util/nanostores.js";
3
+ import { isGetHook, isMutatorHook, isStore } from "./client.js";
4
+ import { m } from "../../../../node_modules/.pnpm/@nanostores_solid@1.1.1_nanostores@1.1.0_solid-js@1.9.10/node_modules/@nanostores/solid/dist/index.js";
5
+ import { createEffect } from "solid-js";
6
+
7
+ //#region ../fragno/dist/client/solid.js
8
+ /**
9
+ * Type guard to check if a value is a SolidJS Accessor.
10
+ *
11
+ * @private
12
+ */
13
+ function isAccessor(value) {
14
+ return typeof value === "function";
15
+ }
16
+ /**
17
+ * Converts a SolidJS Accessor to a NanoStore Atom.
18
+ *
19
+ * This is used to convert SolidJS accessors to atoms, so that we can use them in the store.
20
+ *
21
+ * @private
22
+ */
23
+ function accessorToAtom(accessor) {
24
+ const a = /* @__PURE__ */ atom(accessor());
25
+ createEffect(() => {
26
+ a.set(accessor());
27
+ });
28
+ return a;
29
+ }
30
+ function createSolidHook(hook) {
31
+ return ({ path, query } = {}) => {
32
+ const pathParams = {};
33
+ const queryParams = {};
34
+ for (const [key, value] of Object.entries(path ?? {})) {
35
+ const v = value;
36
+ pathParams[key] = isAccessor(v) ? accessorToAtom(v) : v;
37
+ }
38
+ for (const [key, value] of Object.entries(query ?? {})) {
39
+ const v = value;
40
+ queryParams[key] = isAccessor(v) ? accessorToAtom(v) : v;
41
+ }
42
+ const storeValue = m(hook.store({
43
+ path: pathParams,
44
+ query: queryParams
45
+ }));
46
+ return {
47
+ data: () => storeValue().data,
48
+ loading: () => storeValue().loading,
49
+ error: () => storeValue().error
50
+ };
51
+ };
52
+ }
53
+ function createSolidMutator(hook) {
54
+ return () => {
55
+ const store = m(hook.mutatorStore);
56
+ const mutate = async (args) => {
57
+ const { body, path, query } = args;
58
+ const pathParams = {};
59
+ const queryParams = {};
60
+ for (const [key, value] of Object.entries(path ?? {})) {
61
+ const v = value;
62
+ pathParams[key] = isAccessor(v) ? v() : v;
63
+ }
64
+ for (const [key, value] of Object.entries(query ?? {})) {
65
+ const v = value;
66
+ queryParams[key] = isAccessor(v) ? v() : v;
67
+ }
68
+ return hook.mutatorStore.mutate({
69
+ body,
70
+ path: pathParams,
71
+ query: queryParams
72
+ });
73
+ };
74
+ return {
75
+ mutate,
76
+ data: () => store().data,
77
+ loading: () => store().loading,
78
+ error: () => store().error
79
+ };
80
+ };
81
+ }
82
+ function createSolidStore(hook) {
83
+ if (isReadableAtom(hook.obj)) return m(hook.obj);
84
+ const result = {};
85
+ for (const key in hook.obj) {
86
+ if (!Object.prototype.hasOwnProperty.call(hook.obj, key)) continue;
87
+ const value = hook.obj[key];
88
+ if (isReadableAtom(value)) result[key] = m(value);
89
+ else result[key] = value;
90
+ }
91
+ return () => result;
92
+ }
93
+ function useFragno(clientObj) {
94
+ const result = {};
95
+ for (const key in clientObj) {
96
+ if (!Object.prototype.hasOwnProperty.call(clientObj, key)) continue;
97
+ const hook = clientObj[key];
98
+ if (isGetHook(hook)) result[key] = createSolidHook(hook);
99
+ else if (isMutatorHook(hook)) result[key] = createSolidMutator(hook);
100
+ else if (isStore(hook)) result[key] = createSolidStore(hook);
101
+ else result[key] = hook;
102
+ }
103
+ return result;
104
+ }
105
+
106
+ //#endregion
107
+ export { useFragno };
108
+ //# sourceMappingURL=solid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solid.js","names":["isReadableAtom","isGetHook","isMutatorHook","isStore","atom","useStore","createEffect","isAccessor","value","accessorToAtom","accessor","a","set","createSolidHook","hook","path","query","pathParams","queryParams","key","Object","entries","v","storeValue","store","data","loading","error","createSolidMutator","mutatorStore","mutate","args","body","createSolidStore","obj","result","prototype","hasOwnProperty","call","useFragno","clientObj"],"sources":["../../../../../../../../fragno/dist/client/solid.js"],"sourcesContent":["import { isReadableAtom } from \"../util/nanostores.js\";\nimport { isGetHook, isMutatorHook, isStore } from \"./client.js\";\nimport { atom } from \"nanostores\";\nimport { useStore } from \"@nanostores/solid\";\nimport { createEffect } from \"solid-js\";\n\n//#region src/client/solid.ts\n/**\n* Type guard to check if a value is a SolidJS Accessor.\n*\n* @private\n*/\nfunction isAccessor(value) {\n\treturn typeof value === \"function\";\n}\n/**\n* Converts a SolidJS Accessor to a NanoStore Atom.\n*\n* This is used to convert SolidJS accessors to atoms, so that we can use them in the store.\n*\n* @private\n*/\nfunction accessorToAtom(accessor) {\n\tconst a = atom(accessor());\n\tcreateEffect(() => {\n\t\ta.set(accessor());\n\t});\n\treturn a;\n}\nfunction createSolidHook(hook) {\n\treturn ({ path, query } = {}) => {\n\t\tconst pathParams = {};\n\t\tconst queryParams = {};\n\t\tfor (const [key, value] of Object.entries(path ?? {})) {\n\t\t\tconst v = value;\n\t\t\tpathParams[key] = isAccessor(v) ? accessorToAtom(v) : v;\n\t\t}\n\t\tfor (const [key, value] of Object.entries(query ?? {})) {\n\t\t\tconst v = value;\n\t\t\tqueryParams[key] = isAccessor(v) ? accessorToAtom(v) : v;\n\t\t}\n\t\tconst storeValue = useStore(hook.store({\n\t\t\tpath: pathParams,\n\t\t\tquery: queryParams\n\t\t}));\n\t\treturn {\n\t\t\tdata: () => storeValue().data,\n\t\t\tloading: () => storeValue().loading,\n\t\t\terror: () => storeValue().error\n\t\t};\n\t};\n}\nfunction createSolidMutator(hook) {\n\treturn () => {\n\t\tconst store = useStore(hook.mutatorStore);\n\t\tconst mutate = async (args) => {\n\t\t\tconst { body, path, query } = args;\n\t\t\tconst pathParams = {};\n\t\t\tconst queryParams = {};\n\t\t\tfor (const [key, value] of Object.entries(path ?? {})) {\n\t\t\t\tconst v = value;\n\t\t\t\tpathParams[key] = isAccessor(v) ? v() : v;\n\t\t\t}\n\t\t\tfor (const [key, value] of Object.entries(query ?? {})) {\n\t\t\t\tconst v = value;\n\t\t\t\tqueryParams[key] = isAccessor(v) ? v() : v;\n\t\t\t}\n\t\t\treturn hook.mutatorStore.mutate({\n\t\t\t\tbody,\n\t\t\t\tpath: pathParams,\n\t\t\t\tquery: queryParams\n\t\t\t});\n\t\t};\n\t\treturn {\n\t\t\tmutate,\n\t\t\tdata: () => store().data,\n\t\t\tloading: () => store().loading,\n\t\t\terror: () => store().error\n\t\t};\n\t};\n}\nfunction createSolidStore(hook) {\n\tif (isReadableAtom(hook.obj)) return useStore(hook.obj);\n\tconst result = {};\n\tfor (const key in hook.obj) {\n\t\tif (!Object.prototype.hasOwnProperty.call(hook.obj, key)) continue;\n\t\tconst value = hook.obj[key];\n\t\tif (isReadableAtom(value)) result[key] = useStore(value);\n\t\telse result[key] = value;\n\t}\n\treturn () => result;\n}\nfunction useFragno(clientObj) {\n\tconst result = {};\n\tfor (const key in clientObj) {\n\t\tif (!Object.prototype.hasOwnProperty.call(clientObj, key)) continue;\n\t\tconst hook = clientObj[key];\n\t\tif (isGetHook(hook)) result[key] = createSolidHook(hook);\n\t\telse if (isMutatorHook(hook)) result[key] = createSolidMutator(hook);\n\t\telse if (isStore(hook)) result[key] = createSolidStore(hook);\n\t\telse result[key] = hook;\n\t}\n\treturn result;\n}\n\n//#endregion\nexport { accessorToAtom, isAccessor, useFragno };\n//# sourceMappingURL=solid.js.map"],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import { isGetHook, isMutatorHook } from "./client.js";
2
+ import { createAsyncIteratorFromCallback } from "../util/async.js";
3
+
4
+ //#region ../fragno/dist/client/vanilla.js
5
+ function createVanillaListeners(hook) {
6
+ return ({ path, query } = {}) => {
7
+ const store = hook.store({
8
+ path,
9
+ query
10
+ });
11
+ return {
12
+ listen: (callback) => {
13
+ return store.listen(({ loading, error, data }) => callback({
14
+ loading,
15
+ error,
16
+ data
17
+ }));
18
+ },
19
+ subscribe: (callback) => {
20
+ return store.subscribe(({ loading, error, data }) => callback({
21
+ loading,
22
+ error,
23
+ data
24
+ }));
25
+ },
26
+ refetch: () => {
27
+ return store.revalidate();
28
+ },
29
+ get: () => {
30
+ return store.get();
31
+ },
32
+ [Symbol.asyncIterator]() {
33
+ return createAsyncIteratorFromCallback((callback) => store.listen(({ loading, error, data }) => callback({
34
+ loading,
35
+ error,
36
+ data
37
+ })));
38
+ }
39
+ };
40
+ };
41
+ }
42
+ function createVanillaMutator(hook) {
43
+ return () => {
44
+ const store = hook.mutatorStore;
45
+ return {
46
+ subscribe: (callback) => {
47
+ return store.subscribe((value) => {
48
+ callback({
49
+ loading: value.loading ?? false,
50
+ error: value.error,
51
+ data: value.data
52
+ });
53
+ });
54
+ },
55
+ get: () => {
56
+ const { loading, error, data } = store.get();
57
+ return {
58
+ loading: loading ?? false,
59
+ error,
60
+ data
61
+ };
62
+ },
63
+ mutate: ({ body, path, query }) => {
64
+ return store.mutate({
65
+ body,
66
+ path,
67
+ query
68
+ });
69
+ },
70
+ [Symbol.asyncIterator]() {
71
+ return createAsyncIteratorFromCallback((callback) => store.listen((value) => {
72
+ callback({
73
+ loading: value.loading ?? false,
74
+ error: value.error,
75
+ data: value.data
76
+ });
77
+ }));
78
+ }
79
+ };
80
+ };
81
+ }
82
+ function useFragno(clientObj) {
83
+ const result = {};
84
+ for (const key in clientObj) {
85
+ if (!Object.prototype.hasOwnProperty.call(clientObj, key)) continue;
86
+ const hook = clientObj[key];
87
+ if (isGetHook(hook)) result[key] = createVanillaListeners(hook);
88
+ else if (isMutatorHook(hook)) result[key] = createVanillaMutator(hook);
89
+ else result[key] = hook;
90
+ }
91
+ return result;
92
+ }
93
+
94
+ //#endregion
95
+ export { useFragno };
96
+ //# sourceMappingURL=vanilla.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vanilla.js","names":["isGetHook","isMutatorHook","createAsyncIteratorFromCallback","createVanillaListeners","hook","path","query","store","listen","callback","loading","error","data","subscribe","refetch","revalidate","get","Symbol","asyncIterator","createVanillaMutator","mutatorStore","value","mutate","body","useFragno","clientObj","result","key","Object","prototype","hasOwnProperty","call"],"sources":["../../../../../../../../fragno/dist/client/vanilla.js"],"sourcesContent":["import { isGetHook, isMutatorHook } from \"./client.js\";\nimport { createAsyncIteratorFromCallback } from \"../util/async.js\";\n\n//#region src/client/vanilla.ts\nfunction createVanillaListeners(hook) {\n\treturn ({ path, query } = {}) => {\n\t\tconst store = hook.store({\n\t\t\tpath,\n\t\t\tquery\n\t\t});\n\t\treturn {\n\t\t\tlisten: (callback) => {\n\t\t\t\treturn store.listen(({ loading, error, data }) => callback({\n\t\t\t\t\tloading,\n\t\t\t\t\terror,\n\t\t\t\t\tdata\n\t\t\t\t}));\n\t\t\t},\n\t\t\tsubscribe: (callback) => {\n\t\t\t\treturn store.subscribe(({ loading, error, data }) => callback({\n\t\t\t\t\tloading,\n\t\t\t\t\terror,\n\t\t\t\t\tdata\n\t\t\t\t}));\n\t\t\t},\n\t\t\trefetch: () => {\n\t\t\t\treturn store.revalidate();\n\t\t\t},\n\t\t\tget: () => {\n\t\t\t\treturn store.get();\n\t\t\t},\n\t\t\t[Symbol.asyncIterator]() {\n\t\t\t\treturn createAsyncIteratorFromCallback((callback) => store.listen(({ loading, error, data }) => callback({\n\t\t\t\t\tloading,\n\t\t\t\t\terror,\n\t\t\t\t\tdata\n\t\t\t\t})));\n\t\t\t}\n\t\t};\n\t};\n}\nfunction createVanillaMutator(hook) {\n\treturn () => {\n\t\tconst store = hook.mutatorStore;\n\t\treturn {\n\t\t\tsubscribe: (callback) => {\n\t\t\t\treturn store.subscribe((value) => {\n\t\t\t\t\tcallback({\n\t\t\t\t\t\tloading: value.loading ?? false,\n\t\t\t\t\t\terror: value.error,\n\t\t\t\t\t\tdata: value.data\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tget: () => {\n\t\t\t\tconst { loading, error, data } = store.get();\n\t\t\t\treturn {\n\t\t\t\t\tloading: loading ?? false,\n\t\t\t\t\terror,\n\t\t\t\t\tdata\n\t\t\t\t};\n\t\t\t},\n\t\t\tmutate: ({ body, path, query }) => {\n\t\t\t\treturn store.mutate({\n\t\t\t\t\tbody,\n\t\t\t\t\tpath,\n\t\t\t\t\tquery\n\t\t\t\t});\n\t\t\t},\n\t\t\t[Symbol.asyncIterator]() {\n\t\t\t\treturn createAsyncIteratorFromCallback((callback) => store.listen((value) => {\n\t\t\t\t\tcallback({\n\t\t\t\t\t\tloading: value.loading ?? false,\n\t\t\t\t\t\terror: value.error,\n\t\t\t\t\t\tdata: value.data\n\t\t\t\t\t});\n\t\t\t\t}));\n\t\t\t}\n\t\t};\n\t};\n}\nfunction useFragno(clientObj) {\n\tconst result = {};\n\tfor (const key in clientObj) {\n\t\tif (!Object.prototype.hasOwnProperty.call(clientObj, key)) continue;\n\t\tconst hook = clientObj[key];\n\t\tif (isGetHook(hook)) result[key] = createVanillaListeners(hook);\n\t\telse if (isMutatorHook(hook)) result[key] = createVanillaMutator(hook);\n\t\telse result[key] = hook;\n\t}\n\treturn result;\n}\n\n//#endregion\nexport { useFragno };\n//# sourceMappingURL=vanilla.js.map"],"mappings":";;;;AAIA,SAASG,uBAAuBC,MAAM;AACrC,SAAQ,EAAEC,MAAMC,UAAU,EAAE,KAAK;EAChC,MAAMC,QAAQH,KAAKG,MAAM;GACxBF;GACAC;GACA,CAAC;AACF,SAAO;GACNE,SAASC,aAAa;AACrB,WAAOF,MAAMC,QAAQ,EAAEE,SAASC,OAAOC,WAAWH,SAAS;KAC1DC;KACAC;KACAC;KACA,CAAC,CAAC;;GAEJC,YAAYJ,aAAa;AACxB,WAAOF,MAAMM,WAAW,EAAEH,SAASC,OAAOC,WAAWH,SAAS;KAC7DC;KACAC;KACAC;KACA,CAAC,CAAC;;GAEJE,eAAe;AACd,WAAOP,MAAMQ,YAAY;;GAE1BC,WAAW;AACV,WAAOT,MAAMS,KAAK;;GAEnB,CAACC,OAAOC,iBAAiB;AACxB,WAAOhB,iCAAiCO,aAAaF,MAAMC,QAAQ,EAAEE,SAASC,OAAOC,WAAWH,SAAS;KACxGC;KACAC;KACAC;KACA,CAAC,CAAC,CAAC;;GAEL;;;AAGH,SAASO,qBAAqBf,MAAM;AACnC,cAAa;EACZ,MAAMG,QAAQH,KAAKgB;AACnB,SAAO;GACNP,YAAYJ,aAAa;AACxB,WAAOF,MAAMM,WAAWQ,UAAU;AACjCZ,cAAS;MACRC,SAASW,MAAMX,WAAW;MAC1BC,OAAOU,MAAMV;MACbC,MAAMS,MAAMT;MACZ,CAAC;MACD;;GAEHI,WAAW;IACV,MAAM,EAAEN,SAASC,OAAOC,SAASL,MAAMS,KAAK;AAC5C,WAAO;KACNN,SAASA,WAAW;KACpBC;KACAC;KACA;;GAEFU,SAAS,EAAEC,MAAMlB,MAAMC,YAAY;AAClC,WAAOC,MAAMe,OAAO;KACnBC;KACAlB;KACAC;KACA,CAAC;;GAEH,CAACW,OAAOC,iBAAiB;AACxB,WAAOhB,iCAAiCO,aAAaF,MAAMC,QAAQa,UAAU;AAC5EZ,cAAS;MACRC,SAASW,MAAMX,WAAW;MAC1BC,OAAOU,MAAMV;MACbC,MAAMS,MAAMT;MACZ,CAAC;MACD,CAAC;;GAEJ;;;AAGH,SAASY,UAAUC,WAAW;CAC7B,MAAMC,SAAS,EAAE;AACjB,MAAK,MAAMC,OAAOF,WAAW;AAC5B,MAAI,CAACG,OAAOC,UAAUC,eAAeC,KAAKN,WAAWE,IAAI,CAAE;EAC3D,MAAMvB,OAAOqB,UAAUE;AACvB,MAAI3B,UAAUI,KAAK,CAAEsB,QAAOC,OAAOxB,uBAAuBC,KAAK;WACtDH,cAAcG,KAAK,CAAEsB,QAAOC,OAAOR,qBAAqBf,KAAK;MACjEsB,QAAOC,OAAOvB;;AAEpB,QAAOsB"}