@fragno-dev/upload 0.1.1 → 0.1.3

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 (301) hide show
  1. package/README.md +148 -12
  2. package/dist/browser/client/clients.js +17 -9
  3. package/dist/browser/client/clients.js.map +1 -1
  4. package/dist/browser/client/helpers.d.ts +15 -6
  5. package/dist/browser/client/helpers.d.ts.map +1 -1
  6. package/dist/browser/client/helpers.js +176 -30
  7. package/dist/browser/client/helpers.js.map +1 -1
  8. package/dist/browser/client/node_modules/.pnpm/{@nanostores_query@0.3.4_nanostores@1.1.0 → @nanostores_query@0.3.4_nanostores@1.2.0}/node_modules/@nanostores/query/dist/nanoquery.js +6 -6
  9. package/dist/browser/client/node_modules/.pnpm/{@nanostores_query@0.3.4_nanostores@1.1.0 → @nanostores_query@0.3.4_nanostores@1.2.0}/node_modules/@nanostores/query/dist/nanoquery.js.map +1 -1
  10. package/dist/browser/client/node_modules/.pnpm/{@nanostores_solid@1.1.1_nanostores@1.1.0_solid-js@1.9.10 → @nanostores_solid@1.1.1_nanostores@1.2.0_solid-js@1.9.10}/node_modules/@nanostores/solid/dist/index.js +2 -2
  11. package/dist/browser/client/node_modules/.pnpm/{@nanostores_solid@1.1.1_nanostores@1.1.0_solid-js@1.9.10 → @nanostores_solid@1.1.1_nanostores@1.2.0_solid-js@1.9.10}/node_modules/@nanostores/solid/dist/index.js.map +1 -1
  12. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/atom/index.js +2 -1
  13. package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/atom/index.js.map +1 -0
  14. package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/clean-stores/index.js +6 -0
  15. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/clean-stores/index.js.map +1 -1
  16. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/computed/index.js +8 -5
  17. package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/computed/index.js.map +1 -0
  18. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/lifecycle/index.js +1 -1
  19. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/lifecycle/index.js.map +1 -1
  20. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/listen-keys/index.js +1 -1
  21. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/listen-keys/index.js.map +1 -1
  22. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/map/index.js +1 -1
  23. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/map/index.js.map +1 -1
  24. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/task/index.js +1 -1
  25. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/task/index.js.map +1 -1
  26. package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/warn/index.js +16 -0
  27. package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/warn/index.js.map +1 -0
  28. package/dist/browser/client/packages/fragment-upload/src/definition.js +1 -42
  29. package/dist/browser/client/packages/fragment-upload/src/definition.js.map +1 -1
  30. package/dist/browser/client/packages/fragment-upload/src/routes/files.js +12 -5
  31. package/dist/browser/client/packages/fragment-upload/src/routes/files.js.map +1 -1
  32. package/dist/browser/client/packages/fragment-upload/src/routes/shared.js +3 -4
  33. package/dist/browser/client/packages/fragment-upload/src/routes/shared.js.map +1 -1
  34. package/dist/browser/client/packages/fragment-upload/src/routes/uploads.js +32 -21
  35. package/dist/browser/client/packages/fragment-upload/src/routes/uploads.js.map +1 -1
  36. package/dist/browser/client/packages/fragment-upload/src/schema.js +33 -3
  37. package/dist/browser/client/packages/fragment-upload/src/schema.js.map +1 -1
  38. package/dist/browser/client/packages/fragment-upload/src/types.d.ts +1 -2
  39. package/dist/browser/client/packages/fragment-upload/src/types.d.ts.map +1 -1
  40. package/dist/browser/client/packages/fragno/dist/client/client.js +28 -12
  41. package/dist/browser/client/packages/fragno/dist/client/client.js.map +1 -1
  42. package/dist/browser/client/packages/fragno/dist/client/client.svelte.js +11 -3
  43. package/dist/browser/client/packages/fragno/dist/client/client.svelte.js.map +1 -1
  44. package/dist/browser/client/packages/fragno/dist/client/react.js +104 -12
  45. package/dist/browser/client/packages/fragno/dist/client/react.js.map +1 -1
  46. package/dist/browser/client/packages/fragno/dist/client/solid.js +25 -11
  47. package/dist/browser/client/packages/fragno/dist/client/solid.js.map +1 -1
  48. package/dist/browser/client/packages/fragno/dist/client/vanilla.js +21 -1
  49. package/dist/browser/client/packages/fragno/dist/client/vanilla.js.map +1 -1
  50. package/dist/browser/client/packages/fragno/dist/client/vue.js +19 -11
  51. package/dist/browser/client/packages/fragno/dist/client/vue.js.map +1 -1
  52. package/dist/browser/client/react.d.ts +215 -192
  53. package/dist/browser/client/react.d.ts.map +1 -1
  54. package/dist/browser/client/react.js.map +1 -1
  55. package/dist/browser/client/solid.d.ts +218 -196
  56. package/dist/browser/client/solid.d.ts.map +1 -1
  57. package/dist/browser/client/solid.js.map +1 -1
  58. package/dist/browser/client/svelte.d.ts +216 -193
  59. package/dist/browser/client/svelte.d.ts.map +1 -1
  60. package/dist/browser/client/svelte.js.map +1 -1
  61. package/dist/browser/client/vanilla.d.ts +217 -195
  62. package/dist/browser/client/vanilla.d.ts.map +1 -1
  63. package/dist/browser/client/vanilla.js.map +1 -1
  64. package/dist/browser/client/vue.d.ts +217 -194
  65. package/dist/browser/client/vue.d.ts.map +1 -1
  66. package/dist/browser/client/vue.js.map +1 -1
  67. package/dist/cli/commands/files/delete.d.ts +4 -4
  68. package/dist/cli/commands/files/delete.d.ts.map +1 -1
  69. package/dist/cli/commands/files/delete.js +8 -10
  70. package/dist/cli/commands/files/delete.js.map +1 -1
  71. package/dist/cli/commands/files/download-url.d.ts +4 -4
  72. package/dist/cli/commands/files/download-url.d.ts.map +1 -1
  73. package/dist/cli/commands/files/download-url.js +8 -10
  74. package/dist/cli/commands/files/download-url.js.map +1 -1
  75. package/dist/cli/commands/files/download.d.ts +4 -4
  76. package/dist/cli/commands/files/download.d.ts.map +1 -1
  77. package/dist/cli/commands/files/download.js +10 -12
  78. package/dist/cli/commands/files/download.js.map +1 -1
  79. package/dist/cli/commands/files/get.d.ts +4 -4
  80. package/dist/cli/commands/files/get.d.ts.map +1 -1
  81. package/dist/cli/commands/files/get.js +8 -10
  82. package/dist/cli/commands/files/get.js.map +1 -1
  83. package/dist/cli/commands/files/list.d.ts +4 -4
  84. package/dist/cli/commands/files/list.d.ts.map +1 -1
  85. package/dist/cli/commands/files/list.js +6 -8
  86. package/dist/cli/commands/files/list.js.map +1 -1
  87. package/dist/cli/commands/files/update.d.ts +4 -4
  88. package/dist/cli/commands/files/update.d.ts.map +1 -1
  89. package/dist/cli/commands/files/update.js +8 -10
  90. package/dist/cli/commands/files/update.js.map +1 -1
  91. package/dist/cli/commands/files/upload.d.ts +4 -4
  92. package/dist/cli/commands/files/upload.d.ts.map +1 -1
  93. package/dist/cli/commands/files/upload.js +10 -12
  94. package/dist/cli/commands/files/upload.js.map +1 -1
  95. package/dist/cli/commands/uploads/abort.d.ts +2 -2
  96. package/dist/cli/commands/uploads/abort.d.ts.map +1 -1
  97. package/dist/cli/commands/uploads/abort.js.map +1 -1
  98. package/dist/cli/commands/uploads/complete.d.ts +2 -2
  99. package/dist/cli/commands/uploads/complete.d.ts.map +1 -1
  100. package/dist/cli/commands/uploads/complete.js.map +1 -1
  101. package/dist/cli/commands/uploads/content.d.ts +2 -2
  102. package/dist/cli/commands/uploads/content.d.ts.map +1 -1
  103. package/dist/cli/commands/uploads/content.js +1 -1
  104. package/dist/cli/commands/uploads/content.js.map +1 -1
  105. package/dist/cli/commands/uploads/create.d.ts +4 -4
  106. package/dist/cli/commands/uploads/create.d.ts.map +1 -1
  107. package/dist/cli/commands/uploads/create.js +8 -11
  108. package/dist/cli/commands/uploads/create.js.map +1 -1
  109. package/dist/cli/commands/uploads/get.d.ts +2 -2
  110. package/dist/cli/commands/uploads/get.d.ts.map +1 -1
  111. package/dist/cli/commands/uploads/get.js.map +1 -1
  112. package/dist/cli/commands/uploads/parts-complete.d.ts +2 -2
  113. package/dist/cli/commands/uploads/parts-complete.d.ts.map +1 -1
  114. package/dist/cli/commands/uploads/parts-complete.js.map +1 -1
  115. package/dist/cli/commands/uploads/parts-list.d.ts +2 -2
  116. package/dist/cli/commands/uploads/parts-list.d.ts.map +1 -1
  117. package/dist/cli/commands/uploads/parts-list.js.map +1 -1
  118. package/dist/cli/commands/uploads/parts-urls.d.ts +2 -2
  119. package/dist/cli/commands/uploads/parts-urls.d.ts.map +1 -1
  120. package/dist/cli/commands/uploads/parts-urls.js.map +1 -1
  121. package/dist/cli/commands/uploads/progress.d.ts +2 -2
  122. package/dist/cli/commands/uploads/progress.d.ts.map +1 -1
  123. package/dist/cli/commands/uploads/progress.js.map +1 -1
  124. package/dist/cli/commands/uploads/transfer.d.ts +4 -4
  125. package/dist/cli/commands/uploads/transfer.d.ts.map +1 -1
  126. package/dist/cli/commands/uploads/transfer.js +9 -12
  127. package/dist/cli/commands/uploads/transfer.js.map +1 -1
  128. package/dist/cli/index.d.ts +13 -13
  129. package/dist/cli/index.d.ts.map +1 -1
  130. package/dist/cli/index.js +14 -14
  131. package/dist/cli/index.js.map +1 -1
  132. package/dist/cli/utils/client.js +22 -5
  133. package/dist/cli/utils/client.js.map +1 -1
  134. package/dist/cli/utils/options.js +7 -43
  135. package/dist/cli/utils/options.js.map +1 -1
  136. package/dist/node/cli/commands/files/delete.d.ts +4 -4
  137. package/dist/node/cli/commands/files/delete.d.ts.map +1 -1
  138. package/dist/node/cli/commands/files/delete.js +8 -10
  139. package/dist/node/cli/commands/files/delete.js.map +1 -1
  140. package/dist/node/cli/commands/files/download-url.d.ts +4 -4
  141. package/dist/node/cli/commands/files/download-url.d.ts.map +1 -1
  142. package/dist/node/cli/commands/files/download-url.js +8 -10
  143. package/dist/node/cli/commands/files/download-url.js.map +1 -1
  144. package/dist/node/cli/commands/files/download.d.ts +4 -4
  145. package/dist/node/cli/commands/files/download.d.ts.map +1 -1
  146. package/dist/node/cli/commands/files/download.js +9 -11
  147. package/dist/node/cli/commands/files/download.js.map +1 -1
  148. package/dist/node/cli/commands/files/get.d.ts +4 -4
  149. package/dist/node/cli/commands/files/get.d.ts.map +1 -1
  150. package/dist/node/cli/commands/files/get.js +8 -10
  151. package/dist/node/cli/commands/files/get.js.map +1 -1
  152. package/dist/node/cli/commands/files/list.d.ts +4 -4
  153. package/dist/node/cli/commands/files/list.d.ts.map +1 -1
  154. package/dist/node/cli/commands/files/list.js +6 -8
  155. package/dist/node/cli/commands/files/list.js.map +1 -1
  156. package/dist/node/cli/commands/files/update.d.ts +4 -4
  157. package/dist/node/cli/commands/files/update.d.ts.map +1 -1
  158. package/dist/node/cli/commands/files/update.js +8 -10
  159. package/dist/node/cli/commands/files/update.js.map +1 -1
  160. package/dist/node/cli/commands/files/upload.d.ts +4 -4
  161. package/dist/node/cli/commands/files/upload.d.ts.map +1 -1
  162. package/dist/node/cli/commands/files/upload.js +9 -11
  163. package/dist/node/cli/commands/files/upload.js.map +1 -1
  164. package/dist/node/cli/commands/uploads/abort.d.ts +2 -2
  165. package/dist/node/cli/commands/uploads/abort.d.ts.map +1 -1
  166. package/dist/node/cli/commands/uploads/abort.js.map +1 -1
  167. package/dist/node/cli/commands/uploads/complete.d.ts +2 -2
  168. package/dist/node/cli/commands/uploads/complete.d.ts.map +1 -1
  169. package/dist/node/cli/commands/uploads/complete.js.map +1 -1
  170. package/dist/node/cli/commands/uploads/content.d.ts +2 -2
  171. package/dist/node/cli/commands/uploads/content.d.ts.map +1 -1
  172. package/dist/node/cli/commands/uploads/content.js.map +1 -1
  173. package/dist/node/cli/commands/uploads/create.d.ts +4 -4
  174. package/dist/node/cli/commands/uploads/create.d.ts.map +1 -1
  175. package/dist/node/cli/commands/uploads/create.js +8 -11
  176. package/dist/node/cli/commands/uploads/create.js.map +1 -1
  177. package/dist/node/cli/commands/uploads/get.d.ts +2 -2
  178. package/dist/node/cli/commands/uploads/get.d.ts.map +1 -1
  179. package/dist/node/cli/commands/uploads/get.js.map +1 -1
  180. package/dist/node/cli/commands/uploads/parts-complete.d.ts +2 -2
  181. package/dist/node/cli/commands/uploads/parts-complete.d.ts.map +1 -1
  182. package/dist/node/cli/commands/uploads/parts-complete.js.map +1 -1
  183. package/dist/node/cli/commands/uploads/parts-list.d.ts +2 -2
  184. package/dist/node/cli/commands/uploads/parts-list.d.ts.map +1 -1
  185. package/dist/node/cli/commands/uploads/parts-list.js.map +1 -1
  186. package/dist/node/cli/commands/uploads/parts-urls.d.ts +2 -2
  187. package/dist/node/cli/commands/uploads/parts-urls.d.ts.map +1 -1
  188. package/dist/node/cli/commands/uploads/parts-urls.js.map +1 -1
  189. package/dist/node/cli/commands/uploads/progress.d.ts +2 -2
  190. package/dist/node/cli/commands/uploads/progress.d.ts.map +1 -1
  191. package/dist/node/cli/commands/uploads/progress.js.map +1 -1
  192. package/dist/node/cli/commands/uploads/transfer.d.ts +4 -4
  193. package/dist/node/cli/commands/uploads/transfer.d.ts.map +1 -1
  194. package/dist/node/cli/commands/uploads/transfer.js +8 -11
  195. package/dist/node/cli/commands/uploads/transfer.js.map +1 -1
  196. package/dist/node/cli/index.d.ts +13 -13
  197. package/dist/node/cli/index.d.ts.map +1 -1
  198. package/dist/node/cli/index.js +14 -14
  199. package/dist/node/cli/index.js.map +1 -1
  200. package/dist/node/cli/utils/client.js +22 -5
  201. package/dist/node/cli/utils/client.js.map +1 -1
  202. package/dist/node/cli/utils/options.js +7 -43
  203. package/dist/node/cli/utils/options.js.map +1 -1
  204. package/dist/node/client/clients.d.ts +217 -194
  205. package/dist/node/client/clients.d.ts.map +1 -1
  206. package/dist/node/client/clients.js +17 -9
  207. package/dist/node/client/clients.js.map +1 -1
  208. package/dist/node/client/helpers.d.ts +15 -6
  209. package/dist/node/client/helpers.d.ts.map +1 -1
  210. package/dist/node/client/helpers.js +176 -30
  211. package/dist/node/client/helpers.js.map +1 -1
  212. package/dist/node/client/react.d.ts +217 -194
  213. package/dist/node/client/react.d.ts.map +1 -1
  214. package/dist/node/client/react.js.map +1 -1
  215. package/dist/node/client/solid.d.ts +218 -196
  216. package/dist/node/client/solid.d.ts.map +1 -1
  217. package/dist/node/client/solid.js.map +1 -1
  218. package/dist/node/client/svelte.d.ts +216 -193
  219. package/dist/node/client/svelte.d.ts.map +1 -1
  220. package/dist/node/client/svelte.js.map +1 -1
  221. package/dist/node/client/vanilla.d.ts +217 -195
  222. package/dist/node/client/vanilla.d.ts.map +1 -1
  223. package/dist/node/client/vanilla.js.map +1 -1
  224. package/dist/node/client/vue.d.ts +217 -194
  225. package/dist/node/client/vue.d.ts.map +1 -1
  226. package/dist/node/client/vue.js.map +1 -1
  227. package/dist/node/config.d.ts +6 -6
  228. package/dist/node/config.d.ts.map +1 -1
  229. package/dist/node/config.js.map +1 -1
  230. package/dist/node/definition.d.ts +588 -219
  231. package/dist/node/definition.d.ts.map +1 -1
  232. package/dist/node/definition.js +27 -3
  233. package/dist/node/definition.js.map +1 -1
  234. package/dist/node/file-key.d.ts +19 -0
  235. package/dist/node/file-key.d.ts.map +1 -0
  236. package/dist/node/file-key.js +47 -0
  237. package/dist/node/file-key.js.map +1 -0
  238. package/dist/node/index.d.ts +582 -175
  239. package/dist/node/index.d.ts.map +1 -1
  240. package/dist/node/index.js +3 -2
  241. package/dist/node/index.js.map +1 -1
  242. package/dist/node/routes/files.js +99 -64
  243. package/dist/node/routes/files.js.map +1 -1
  244. package/dist/node/routes/index.d.ts +1497 -721
  245. package/dist/node/routes/index.d.ts.map +1 -1
  246. package/dist/node/routes/shared.js +5 -9
  247. package/dist/node/routes/shared.js.map +1 -1
  248. package/dist/node/routes/uploads.js +105 -47
  249. package/dist/node/routes/uploads.js.map +1 -1
  250. package/dist/node/schema.d.ts +6 -6
  251. package/dist/node/schema.d.ts.map +1 -1
  252. package/dist/node/schema.js +12 -3
  253. package/dist/node/schema.js.map +1 -1
  254. package/dist/node/services/files.d.ts +6 -2
  255. package/dist/node/services/files.d.ts.map +1 -1
  256. package/dist/node/services/files.js +22 -20
  257. package/dist/node/services/files.js.map +1 -1
  258. package/dist/node/services/helpers.js +37 -15
  259. package/dist/node/services/helpers.js.map +1 -1
  260. package/dist/node/services/uploads.d.ts +10 -5
  261. package/dist/node/services/uploads.d.ts.map +1 -1
  262. package/dist/node/services/uploads.js +340 -63
  263. package/dist/node/services/uploads.js.map +1 -1
  264. package/dist/node/storage/fs.d.ts.map +1 -1
  265. package/dist/node/storage/fs.js +16 -10
  266. package/dist/node/storage/fs.js.map +1 -1
  267. package/dist/node/storage/object-key.js +36 -0
  268. package/dist/node/storage/object-key.js.map +1 -0
  269. package/dist/node/storage/r2-binding.d.ts +59 -0
  270. package/dist/node/storage/r2-binding.d.ts.map +1 -0
  271. package/dist/node/storage/r2-binding.js +245 -0
  272. package/dist/node/storage/r2-binding.js.map +1 -0
  273. package/dist/node/storage/r2.d.ts +6 -5
  274. package/dist/node/storage/r2.d.ts.map +1 -1
  275. package/dist/node/storage/s3.d.ts.map +1 -1
  276. package/dist/node/storage/s3.js +16 -10
  277. package/dist/node/storage/s3.js.map +1 -1
  278. package/dist/node/storage/types.d.ts +6 -5
  279. package/dist/node/storage/types.d.ts.map +1 -1
  280. package/dist/node/types.d.ts +1 -2
  281. package/dist/node/types.d.ts.map +1 -1
  282. package/package.json +26 -46
  283. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/atom/index.js.map +0 -1
  284. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/clean-stores/index.js +0 -6
  285. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/computed/index.js.map +0 -1
  286. package/dist/browser/client/packages/fragment-upload/src/keys.d.ts +0 -7
  287. package/dist/browser/client/packages/fragment-upload/src/keys.d.ts.map +0 -1
  288. package/dist/browser/client/packages/fragment-upload/src/keys.js +0 -28
  289. package/dist/browser/client/packages/fragment-upload/src/keys.js.map +0 -1
  290. package/dist/browser/index-BdjKPO4J.d.ts +0 -177
  291. package/dist/browser/index-BdjKPO4J.d.ts.map +0 -1
  292. package/dist/browser/index.js +0 -3
  293. package/dist/browser/src-vdNJUbjT.js +0 -1982
  294. package/dist/browser/src-vdNJUbjT.js.map +0 -1
  295. package/dist/cli/keys.js +0 -32
  296. package/dist/cli/keys.js.map +0 -1
  297. package/dist/node/keys.d.ts +0 -12
  298. package/dist/node/keys.d.ts.map +0 -1
  299. package/dist/node/keys.js +0 -63
  300. package/dist/node/keys.js.map +0 -1
  301. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"definition.d.ts","names":[],"sources":["../../src/definition.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;cAQa,6CAAwB,mBAAA,sBAAA,iBAAA,CAAA,8BAAA;kBAAA;;;;;;;;;MAAxB,cAAA,EAAA,CAAA,OAqFH,iBAAA,EAAA,GAAA,IAAA,UAAA,CAAA,IAAA,CAAA;MAAA,aAAA,EAAA,CAAA,OAAA,iBAAA,EAAA,GAAA,IAAA,UAAA,CAAA,IAAA,CAAA;MArF2B,eAAA,EAAA,CAAA,OAAA,sBAAA,EAAA,GAAA,IAAA,UAAA,CAAA,IAAA,CAAA;IAAA,CAAA,CAAA;KAAA,OAAA,gBAAA,EAAA,6BAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6BpB;;;;;;;;sBAOoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAPpB,CAAA,CAAA;;IAOoB,SAAA,CAAA,kDAAA,CAAA,CAAA,MAAA,SAAA,CAAA,oCAAA,QAAA,EAAA,SAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,EAAA,OAAA,EAAA,KAAA,EAAA,KAAA,EAAA,KAAA,EAAA,KAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBApCA,GAAA,IAAA;IAAA,SAAA,MAAA"}
1
+ {"version":3,"file":"definition.d.ts","names":[],"sources":["../../src/definition.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;cAea,6CAAwB,mBAAA,sBAAA,iBAAA,CAAA,8BAAA;kBAAA;;;;;;;;;MAAxB,cAAA,EAAA,CAAA,OAmJH,iBAAA,EAAA,GAAA,IAAA,UAAA,CAAA,IAAA,CAAA;MAAA,aAAA,EAAA,CAAA,OAAA,iBAAA,EAAA,GAAA,IAAA,UAAA,CAAA,IAAA,CAAA;MAnJ2B,oBAAA,EAAA,CAAA,OAAA,iBAAA,EAAA,GAAA,IAAA,UAAA,CAAA,IAAA,CAAA;MAAA,eAAA,EAAA,CAAA,OAAA,sBAAA,EAAA,GAAA,IAAA,UAAA,CAAA,IAAA,CAAA;IAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiB9B;;;;;;;;;sBAQmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBARnB;;;;;;;;;sBAQmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBARnB;;;;;;;;;sBAQmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MARnB,cAAA,EAAA,CAAA,OAAA,iBAAA,EAAA,GAAA,IAAA,UAAA,CAAA,IAAA,CAAA;;MAQmB,oBAAA,EAAA,CAAA,OAAA,iBAAA,EAAA,GAAA,IAAA,UAAA,CAAA,IAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KARnB;;IAQmB,GAAA,EAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KARnB,EAAA;;IAQmB,QAAA,0CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAzBW,QAAA,EAAA,MAAA"}
@@ -7,7 +7,10 @@ import { defineFragment } from "@fragno-dev/core";
7
7
  import { withDatabase } from "@fragno-dev/db";
8
8
 
9
9
  //#region src/definition.ts
10
+ const buildMissingDeletedFileObjectKeyError = (input) => `Missing persisted objectKey for deleted file '${input.provider}:${input.fileKey}'. Refusing to reconstruct storage key from provider/fileKey.`;
11
+ const buildMissingCleanupObjectKeyError = (input) => `Missing storage cleanup objectKey for '${input.provider}:${input.fileKey}'. Refusing to reconstruct storage key from provider/fileKey.`;
10
12
  const uploadFragmentDefinition = defineFragment("upload").extend(withDatabase(uploadSchema)).withDependencies(({ config }) => ({ resolvedConfig: resolveUploadFragmentConfig(config) })).provideHooks(({ defineHook, config }) => {
13
+ const resolvedConfig = resolveUploadFragmentConfig(config);
11
14
  return {
12
15
  onFileReady: defineHook(async function(payload) {
13
16
  await config.onFileReady?.(payload, this.idempotencyKey);
@@ -15,8 +18,28 @@ const uploadFragmentDefinition = defineFragment("upload").extend(withDatabase(up
15
18
  onUploadFailed: defineHook(async function(payload) {
16
19
  await config.onUploadFailed?.(payload, this.idempotencyKey);
17
20
  }),
21
+ cleanupStorageObject: defineHook(async function(payload) {
22
+ const objectKey = typeof payload.objectKey === "string" && payload.objectKey.length > 0 ? payload.objectKey : null;
23
+ if (!objectKey) throw new Error(buildMissingCleanupObjectKeyError({
24
+ provider: payload.provider,
25
+ fileKey: payload.fileKey
26
+ }));
27
+ await resolvedConfig.storage.deleteObject({ storageKey: objectKey });
28
+ }),
18
29
  onFileDeleted: defineHook(async function(payload) {
19
- await config.onFileDeleted?.(payload, this.idempotencyKey);
30
+ const persistedObjectKey = (typeof payload.objectKey === "string" && payload.objectKey.length > 0 ? payload.objectKey : void 0) ?? await this.handlerTx().retrieve(({ forSchema }) => forSchema(uploadSchema).findFirst("file", (b) => b.whereIndex("idx_file_provider_key", (eb) => eb.and(eb("provider", "=", payload.provider), eb("key", "=", payload.fileKey))))).transformRetrieve(([file]) => {
31
+ if (file?.status === "deleted" && typeof file.objectKey === "string" && file.objectKey.length > 0) return file.objectKey;
32
+ return null;
33
+ }).execute();
34
+ if (!persistedObjectKey) throw new Error(buildMissingDeletedFileObjectKeyError({
35
+ provider: payload.provider,
36
+ fileKey: payload.fileKey
37
+ }));
38
+ await resolvedConfig.storage.deleteObject({ storageKey: persistedObjectKey });
39
+ await config.onFileDeleted?.({
40
+ ...payload,
41
+ objectKey: persistedObjectKey
42
+ }, this.idempotencyKey);
20
43
  }),
21
44
  onUploadTimeout: defineHook(async function(payload) {
22
45
  const now = /* @__PURE__ */ new Date();
@@ -35,8 +58,9 @@ const uploadFragmentDefinition = defineFragment("upload").extend(withDatabase(up
35
58
  return {
36
59
  shouldNotify: true,
37
60
  payload: {
38
- fileKey: upload.fileKey,
39
- fileKeyParts: payload.fileKeyParts,
61
+ provider: upload.provider,
62
+ fileKey: upload.key,
63
+ objectKey: upload.objectKey,
40
64
  uploadId: payload.uploadId,
41
65
  uploaderId: upload.uploaderId,
42
66
  sizeBytes: Number(upload.expectedSizeBytes),
@@ -1 +1 @@
1
- {"version":3,"file":"definition.js","names":[],"sources":["../../src/definition.ts"],"sourcesContent":["import { defineFragment } from \"@fragno-dev/core\";\nimport { withDatabase } from \"@fragno-dev/db\";\nimport type { UploadFragmentConfig } from \"./config\";\nimport { resolveUploadFragmentConfig } from \"./config\";\nimport { uploadSchema } from \"./schema\";\nimport { createFileServices, createUploadServices } from \"./services\";\nimport type { UploadStatus } from \"./types\";\n\nexport const uploadFragmentDefinition = defineFragment<UploadFragmentConfig>(\"upload\")\n .extend(withDatabase(uploadSchema))\n .withDependencies(({ config }) => ({\n resolvedConfig: resolveUploadFragmentConfig(config),\n }))\n .provideHooks(({ defineHook, config }) => {\n return {\n onFileReady: defineHook(async function (payload) {\n await config.onFileReady?.(payload, this.idempotencyKey);\n }),\n onUploadFailed: defineHook(async function (payload) {\n await config.onUploadFailed?.(payload, this.idempotencyKey);\n }),\n onFileDeleted: defineHook(async function (payload) {\n await config.onFileDeleted?.(payload, this.idempotencyKey);\n }),\n onUploadTimeout: defineHook(async function (payload) {\n const now = new Date();\n\n if (!payload.uploadId) {\n return;\n }\n\n const result = await this.handlerTx()\n .retrieve(({ forSchema }) =>\n forSchema(uploadSchema).findFirst(\"upload\", (b) =>\n b.whereIndex(\"primary\", (eb) => eb(\"id\", \"=\", payload.uploadId)),\n ),\n )\n .mutate(({ forSchema, retrieveResult: [upload] }) => {\n if (!upload) {\n return { shouldNotify: false as const };\n }\n\n const status = upload.status as UploadStatus;\n if (\n status === \"completed\" ||\n status === \"aborted\" ||\n status === \"failed\" ||\n status === \"expired\"\n ) {\n return { shouldNotify: false as const };\n }\n\n if (upload.expiresAt.getTime() > now.getTime()) {\n return { shouldNotify: false as const };\n }\n\n const uow = forSchema(uploadSchema);\n uow.update(\"upload\", upload.id, (b) =>\n b.set({\n status: \"expired\",\n updatedAt: now,\n errorCode: \"UPLOAD_EXPIRED\",\n errorMessage: \"Upload expired\",\n }),\n );\n\n return {\n shouldNotify: true as const,\n payload: {\n fileKey: upload.fileKey,\n fileKeyParts: payload.fileKeyParts,\n uploadId: payload.uploadId,\n uploaderId: upload.uploaderId,\n sizeBytes: Number(upload.expectedSizeBytes),\n contentType: upload.contentType,\n },\n };\n })\n .transform(({ mutateResult }) => mutateResult)\n .execute();\n\n if (result.shouldNotify) {\n await config.onUploadFailed?.(result.payload, this.idempotencyKey);\n }\n }),\n };\n })\n .providesBaseService(({ defineService, deps }) => {\n return defineService({\n ...createUploadServices(deps.resolvedConfig),\n ...createFileServices(deps.resolvedConfig),\n });\n })\n .build();\n"],"mappings":";;;;;;;;;AAQA,MAAa,2BAA2B,eAAqC,SAAS,CACnF,OAAO,aAAa,aAAa,CAAC,CAClC,kBAAkB,EAAE,cAAc,EACjC,gBAAgB,4BAA4B,OAAO,EACpD,EAAE,CACF,cAAc,EAAE,YAAY,aAAa;AACxC,QAAO;EACL,aAAa,WAAW,eAAgB,SAAS;AAC/C,SAAM,OAAO,cAAc,SAAS,KAAK,eAAe;IACxD;EACF,gBAAgB,WAAW,eAAgB,SAAS;AAClD,SAAM,OAAO,iBAAiB,SAAS,KAAK,eAAe;IAC3D;EACF,eAAe,WAAW,eAAgB,SAAS;AACjD,SAAM,OAAO,gBAAgB,SAAS,KAAK,eAAe;IAC1D;EACF,iBAAiB,WAAW,eAAgB,SAAS;GACnD,MAAM,sBAAM,IAAI,MAAM;AAEtB,OAAI,CAAC,QAAQ,SACX;GAGF,MAAM,SAAS,MAAM,KAAK,WAAW,CAClC,UAAU,EAAE,gBACX,UAAU,aAAa,CAAC,UAAU,WAAW,MAC3C,EAAE,WAAW,YAAY,OAAO,GAAG,MAAM,KAAK,QAAQ,SAAS,CAAC,CACjE,CACF,CACA,QAAQ,EAAE,WAAW,gBAAgB,CAAC,cAAc;AACnD,QAAI,CAAC,OACH,QAAO,EAAE,cAAc,OAAgB;IAGzC,MAAM,SAAS,OAAO;AACtB,QACE,WAAW,eACX,WAAW,aACX,WAAW,YACX,WAAW,UAEX,QAAO,EAAE,cAAc,OAAgB;AAGzC,QAAI,OAAO,UAAU,SAAS,GAAG,IAAI,SAAS,CAC5C,QAAO,EAAE,cAAc,OAAgB;AAIzC,IADY,UAAU,aAAa,CAC/B,OAAO,UAAU,OAAO,KAAK,MAC/B,EAAE,IAAI;KACJ,QAAQ;KACR,WAAW;KACX,WAAW;KACX,cAAc;KACf,CAAC,CACH;AAED,WAAO;KACL,cAAc;KACd,SAAS;MACP,SAAS,OAAO;MAChB,cAAc,QAAQ;MACtB,UAAU,QAAQ;MAClB,YAAY,OAAO;MACnB,WAAW,OAAO,OAAO,kBAAkB;MAC3C,aAAa,OAAO;MACrB;KACF;KACD,CACD,WAAW,EAAE,mBAAmB,aAAa,CAC7C,SAAS;AAEZ,OAAI,OAAO,aACT,OAAM,OAAO,iBAAiB,OAAO,SAAS,KAAK,eAAe;IAEpE;EACH;EACD,CACD,qBAAqB,EAAE,eAAe,WAAW;AAChD,QAAO,cAAc;EACnB,GAAG,qBAAqB,KAAK,eAAe;EAC5C,GAAG,mBAAmB,KAAK,eAAe;EAC3C,CAAC;EACF,CACD,OAAO"}
1
+ {"version":3,"file":"definition.js","names":[],"sources":["../../src/definition.ts"],"sourcesContent":["import { defineFragment } from \"@fragno-dev/core\";\nimport { withDatabase } from \"@fragno-dev/db\";\n\nimport type { UploadFragmentConfig } from \"./config\";\nimport { resolveUploadFragmentConfig } from \"./config\";\nimport { uploadSchema } from \"./schema\";\nimport { createFileServices, createUploadServices } from \"./services\";\nimport type { UploadStatus } from \"./types\";\n\nconst buildMissingDeletedFileObjectKeyError = (input: { provider: string; fileKey: string }) =>\n `Missing persisted objectKey for deleted file '${input.provider}:${input.fileKey}'. Refusing to reconstruct storage key from provider/fileKey.`;\n\nconst buildMissingCleanupObjectKeyError = (input: { provider: string; fileKey: string }) =>\n `Missing storage cleanup objectKey for '${input.provider}:${input.fileKey}'. Refusing to reconstruct storage key from provider/fileKey.`;\n\nexport const uploadFragmentDefinition = defineFragment<UploadFragmentConfig>(\"upload\")\n .extend(withDatabase(uploadSchema))\n .withDependencies(({ config }) => ({\n resolvedConfig: resolveUploadFragmentConfig(config),\n }))\n .provideHooks(({ defineHook, config }) => {\n const resolvedConfig = resolveUploadFragmentConfig(config);\n\n return {\n onFileReady: defineHook(async function (payload) {\n await config.onFileReady?.(payload, this.idempotencyKey);\n }),\n onUploadFailed: defineHook(async function (payload) {\n await config.onUploadFailed?.(payload, this.idempotencyKey);\n }),\n cleanupStorageObject: defineHook(async function (payload) {\n const objectKey =\n typeof payload.objectKey === \"string\" && payload.objectKey.length > 0\n ? payload.objectKey\n : null;\n\n if (!objectKey) {\n throw new Error(\n buildMissingCleanupObjectKeyError({\n provider: payload.provider,\n fileKey: payload.fileKey,\n }),\n );\n }\n\n await resolvedConfig.storage.deleteObject({ storageKey: objectKey });\n }),\n onFileDeleted: defineHook(async function (payload) {\n const payloadObjectKey =\n typeof payload.objectKey === \"string\" && payload.objectKey.length > 0\n ? payload.objectKey\n : undefined;\n const persistedObjectKey =\n payloadObjectKey ??\n (await this.handlerTx()\n .retrieve(({ forSchema }) =>\n forSchema(uploadSchema).findFirst(\"file\", (b) =>\n b.whereIndex(\"idx_file_provider_key\", (eb) =>\n eb.and(eb(\"provider\", \"=\", payload.provider), eb(\"key\", \"=\", payload.fileKey)),\n ),\n ),\n )\n .transformRetrieve(([file]) => {\n if (\n file?.status === \"deleted\" &&\n typeof file.objectKey === \"string\" &&\n file.objectKey.length > 0\n ) {\n return file.objectKey;\n }\n return null;\n })\n .execute());\n\n if (!persistedObjectKey) {\n throw new Error(\n buildMissingDeletedFileObjectKeyError({\n provider: payload.provider,\n fileKey: payload.fileKey,\n }),\n );\n }\n\n await resolvedConfig.storage.deleteObject({ storageKey: persistedObjectKey });\n await config.onFileDeleted?.(\n {\n ...payload,\n objectKey: persistedObjectKey,\n },\n this.idempotencyKey,\n );\n }),\n onUploadTimeout: defineHook(async function (payload) {\n const now = new Date();\n\n if (!payload.uploadId) {\n return;\n }\n\n const result = await this.handlerTx()\n .retrieve(({ forSchema }) =>\n forSchema(uploadSchema).findFirst(\"upload\", (b) =>\n b.whereIndex(\"primary\", (eb) => eb(\"id\", \"=\", payload.uploadId)),\n ),\n )\n .mutate(({ forSchema, retrieveResult: [upload] }) => {\n if (!upload) {\n return { shouldNotify: false as const };\n }\n\n const status = upload.status as UploadStatus;\n if (\n status === \"completed\" ||\n status === \"aborted\" ||\n status === \"failed\" ||\n status === \"expired\"\n ) {\n return { shouldNotify: false as const };\n }\n\n if (upload.expiresAt.getTime() > now.getTime()) {\n return { shouldNotify: false as const };\n }\n\n const uow = forSchema(uploadSchema);\n uow.update(\"upload\", upload.id, (b) =>\n b.set({\n status: \"expired\",\n updatedAt: now,\n errorCode: \"UPLOAD_EXPIRED\",\n errorMessage: \"Upload expired\",\n }),\n );\n\n return {\n shouldNotify: true as const,\n payload: {\n provider: upload.provider,\n fileKey: upload.key,\n objectKey: upload.objectKey,\n uploadId: payload.uploadId,\n uploaderId: upload.uploaderId,\n sizeBytes: Number(upload.expectedSizeBytes),\n contentType: upload.contentType,\n },\n };\n })\n .transform(({ mutateResult }) => mutateResult)\n .execute();\n\n if (result.shouldNotify) {\n await config.onUploadFailed?.(result.payload, this.idempotencyKey);\n }\n }),\n };\n })\n .providesBaseService(({ defineService, deps }) => {\n return defineService({\n ...createUploadServices(deps.resolvedConfig),\n ...createFileServices(deps.resolvedConfig),\n });\n })\n .build();\n"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ //#region src/file-key.d.ts
2
+ type FileKey = string;
3
+ type FileKeyValidationResult = {
4
+ valid: true;
5
+ } | {
6
+ valid: false;
7
+ reason: "EMPTY" | "TOO_LONG" | "EMPTY_SEGMENT" | "DOT_SEGMENT" | "CONTROL_CHARACTERS";
8
+ };
9
+ type ValidateFileKeyOptions = {
10
+ maxBytes?: number;
11
+ };
12
+ declare const validateFileKey: (value: string, options?: ValidateFileKeyOptions) => FileKeyValidationResult;
13
+ declare const assertFileKey: (value: string, options?: ValidateFileKeyOptions) => FileKey;
14
+ declare const splitFileKey: (value: string) => readonly string[];
15
+ //# sourceMappingURL=file-key.d.ts.map
16
+
17
+ //#endregion
18
+ export { FileKey, FileKeyValidationResult, ValidateFileKeyOptions, assertFileKey, splitFileKey, validateFileKey };
19
+ //# sourceMappingURL=file-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-key.d.ts","names":[],"sources":["../../src/file-key.ts"],"sourcesContent":[],"mappings":";KAAY,OAAA;AAAA,KAEA,uBAAA,GAFO;EAEP,KAAA,EAAA,IAAA;AAOZ,CAAA,GAAY;EAuBC,KAAA,EAAA,KAAA;EA4BZ,MAAA,EAAA,OAAA,GAAA,UAAA,GAAA,eAAA,GAAA,aAAA,GAAA,oBAAA;;AAzBE,KA1BS,sBAAA,GA0BT;EAyBF,QAAA,CAAA,EAAA,MAAA;AAED,CAAA;AAMC,cApCY,eAoCZ,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAlCU,sBAkCV,EAAA,GAjCE,uBAiCF;AANsD,cAA1C,aAA0C,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,sBAAA,EAAA,GAAyB,OAAzB;AAAyB,cAQnE,YARmE,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,SAAA,MAAA,EAAA"}
@@ -0,0 +1,47 @@
1
+ //#region src/file-key.ts
2
+ const hasControlCharacters = (value) => {
3
+ for (let index = 0; index < value.length; index += 1) {
4
+ const code = value.charCodeAt(index);
5
+ if (code <= 31 || code === 127) return true;
6
+ }
7
+ return false;
8
+ };
9
+ const utf8ByteLength = (value) => {
10
+ if (typeof Buffer !== "undefined") return Buffer.byteLength(value, "utf8");
11
+ return new TextEncoder().encode(value).byteLength;
12
+ };
13
+ const validateFileKey = (value, options = {}) => {
14
+ if (value.length === 0) return {
15
+ valid: false,
16
+ reason: "EMPTY"
17
+ };
18
+ if (hasControlCharacters(value)) return {
19
+ valid: false,
20
+ reason: "CONTROL_CHARACTERS"
21
+ };
22
+ const segments = value.split("/");
23
+ for (const segment of segments) {
24
+ if (segment.length === 0) return {
25
+ valid: false,
26
+ reason: "EMPTY_SEGMENT"
27
+ };
28
+ if (segment === "." || segment === "..") return {
29
+ valid: false,
30
+ reason: "DOT_SEGMENT"
31
+ };
32
+ }
33
+ if (typeof options.maxBytes === "number" && utf8ByteLength(value) > options.maxBytes) return {
34
+ valid: false,
35
+ reason: "TOO_LONG"
36
+ };
37
+ return { valid: true };
38
+ };
39
+ const assertFileKey = (value, options) => {
40
+ if (!validateFileKey(value, options).valid) throw new Error("INVALID_FILE_KEY");
41
+ return value;
42
+ };
43
+ const splitFileKey = (value) => assertFileKey(value).split("/");
44
+
45
+ //#endregion
46
+ export { assertFileKey, splitFileKey, validateFileKey };
47
+ //# sourceMappingURL=file-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-key.js","names":[],"sources":["../../src/file-key.ts"],"sourcesContent":["export type FileKey = string;\n\nexport type FileKeyValidationResult =\n | { valid: true }\n | {\n valid: false;\n reason: \"EMPTY\" | \"TOO_LONG\" | \"EMPTY_SEGMENT\" | \"DOT_SEGMENT\" | \"CONTROL_CHARACTERS\";\n };\n\nexport type ValidateFileKeyOptions = {\n maxBytes?: number;\n};\n\nconst hasControlCharacters = (value: string): boolean => {\n for (let index = 0; index < value.length; index += 1) {\n const code = value.charCodeAt(index);\n if (code <= 0x1f || code === 0x7f) {\n return true;\n }\n }\n\n return false;\n};\n\nconst utf8ByteLength = (value: string): number => {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.byteLength(value, \"utf8\");\n }\n\n return new TextEncoder().encode(value).byteLength;\n};\n\nexport const validateFileKey = (\n value: string,\n options: ValidateFileKeyOptions = {},\n): FileKeyValidationResult => {\n if (value.length === 0) {\n return { valid: false, reason: \"EMPTY\" };\n }\n\n if (hasControlCharacters(value)) {\n return { valid: false, reason: \"CONTROL_CHARACTERS\" };\n }\n\n const segments = value.split(\"/\");\n for (const segment of segments) {\n if (segment.length === 0) {\n return { valid: false, reason: \"EMPTY_SEGMENT\" };\n }\n\n if (segment === \".\" || segment === \"..\") {\n return { valid: false, reason: \"DOT_SEGMENT\" };\n }\n }\n\n if (typeof options.maxBytes === \"number\" && utf8ByteLength(value) > options.maxBytes) {\n return { valid: false, reason: \"TOO_LONG\" };\n }\n\n return { valid: true };\n};\n\nexport const assertFileKey = (value: string, options?: ValidateFileKeyOptions): FileKey => {\n const result = validateFileKey(value, options);\n if (!result.valid) {\n throw new Error(\"INVALID_FILE_KEY\");\n }\n return value;\n};\n\nexport const splitFileKey = (value: string): readonly string[] => assertFileKey(value).split(\"/\");\n"],"mappings":";AAaA,MAAM,wBAAwB,UAA2B;AACvD,MAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;EACpD,MAAM,OAAO,MAAM,WAAW,MAAM;AACpC,MAAI,QAAQ,MAAQ,SAAS,IAC3B,QAAO;;AAIX,QAAO;;AAGT,MAAM,kBAAkB,UAA0B;AAChD,KAAI,OAAO,WAAW,YACpB,QAAO,OAAO,WAAW,OAAO,OAAO;AAGzC,QAAO,IAAI,aAAa,CAAC,OAAO,MAAM,CAAC;;AAGzC,MAAa,mBACX,OACA,UAAkC,EAAE,KACR;AAC5B,KAAI,MAAM,WAAW,EACnB,QAAO;EAAE,OAAO;EAAO,QAAQ;EAAS;AAG1C,KAAI,qBAAqB,MAAM,CAC7B,QAAO;EAAE,OAAO;EAAO,QAAQ;EAAsB;CAGvD,MAAM,WAAW,MAAM,MAAM,IAAI;AACjC,MAAK,MAAM,WAAW,UAAU;AAC9B,MAAI,QAAQ,WAAW,EACrB,QAAO;GAAE,OAAO;GAAO,QAAQ;GAAiB;AAGlD,MAAI,YAAY,OAAO,YAAY,KACjC,QAAO;GAAE,OAAO;GAAO,QAAQ;GAAe;;AAIlD,KAAI,OAAO,QAAQ,aAAa,YAAY,eAAe,MAAM,GAAG,QAAQ,SAC1E,QAAO;EAAE,OAAO;EAAO,QAAQ;EAAY;AAG7C,QAAO,EAAE,OAAO,MAAM;;AAGxB,MAAa,iBAAiB,OAAe,YAA8C;AAEzF,KAAI,CADW,gBAAgB,OAAO,QAAQ,CAClC,MACV,OAAM,IAAI,MAAM,mBAAmB;AAErC,QAAO;;AAGT,MAAa,gBAAgB,UAAqC,cAAc,MAAM,CAAC,MAAM,IAAI"}