@jrmc/adonis-attachment 5.2.1 → 6.0.0-alpha.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 (424) hide show
  1. package/README.md +10 -81
  2. package/build/bin/test.d.ts +2 -0
  3. package/build/bin/test.d.ts.map +1 -0
  4. package/build/bin/test.js +9 -0
  5. package/build/bin/test.js.map +1 -0
  6. package/build/commands/commands.json +1 -1
  7. package/build/commands/make/attachment_v5_migration.d.ts +17 -0
  8. package/build/commands/make/attachment_v5_migration.d.ts.map +1 -0
  9. package/build/commands/make/attachment_v5_migration.js +26 -0
  10. package/build/commands/make/attachment_v5_migration.js.map +1 -0
  11. package/build/commands/make/{converter.d.ts → attachments_table.d.ts} +6 -4
  12. package/build/commands/make/attachments_table.d.ts.map +1 -0
  13. package/build/commands/make/attachments_table.js +30 -0
  14. package/build/commands/make/attachments_table.js.map +1 -0
  15. package/build/configure.d.ts.map +1 -1
  16. package/build/configure.js +2 -1
  17. package/build/configure.js.map +1 -0
  18. package/build/index.d.ts +26 -10
  19. package/build/index.d.ts.map +1 -1
  20. package/build/index.js +16 -9
  21. package/build/index.js.map +1 -0
  22. package/build/providers/attachment_provider.d.ts +0 -19
  23. package/build/providers/attachment_provider.d.ts.map +1 -1
  24. package/build/providers/attachment_provider.js +30 -26
  25. package/build/providers/attachment_provider.js.map +1 -0
  26. package/build/services/main.d.ts +3 -3
  27. package/build/services/main.d.ts.map +1 -1
  28. package/build/services/main.js +42 -5
  29. package/build/services/main.js.map +1 -0
  30. package/build/src/adapters/adonis_drive_storage.d.ts +33 -0
  31. package/build/src/adapters/adonis_drive_storage.d.ts.map +1 -0
  32. package/build/src/adapters/adonis_drive_storage.js +35 -0
  33. package/build/src/adapters/adonis_drive_storage.js.map +1 -0
  34. package/build/src/adapters/local_file_storage.d.ts +25 -0
  35. package/build/src/adapters/local_file_storage.d.ts.map +1 -0
  36. package/build/src/adapters/local_file_storage.js +54 -0
  37. package/build/src/adapters/local_file_storage.js.map +1 -0
  38. package/build/src/controllers/attachments_controller.d.ts +13 -2
  39. package/build/src/controllers/attachments_controller.d.ts.map +1 -1
  40. package/build/src/controllers/attachments_controller.js +20 -107
  41. package/build/src/controllers/attachments_controller.js.map +1 -0
  42. package/build/src/core/attachment.d.ts +70 -0
  43. package/build/src/core/attachment.d.ts.map +1 -0
  44. package/build/src/core/attachment.js +150 -0
  45. package/build/src/core/attachment.js.map +1 -0
  46. package/build/src/core/attachment_job_processor.d.ts +30 -0
  47. package/build/src/core/attachment_job_processor.d.ts.map +1 -0
  48. package/build/src/core/attachment_job_processor.js +47 -0
  49. package/build/src/core/attachment_job_processor.js.map +1 -0
  50. package/build/src/core/attachment_options.d.ts +32 -0
  51. package/build/src/core/attachment_options.d.ts.map +1 -0
  52. package/build/src/core/attachment_options.js +24 -0
  53. package/build/src/core/attachment_options.js.map +1 -0
  54. package/build/src/core/attachment_repository.d.ts +15 -0
  55. package/build/src/core/attachment_repository.d.ts.map +1 -0
  56. package/build/src/core/attachment_repository.js +8 -0
  57. package/build/src/core/attachment_repository.js.map +1 -0
  58. package/build/src/core/attachment_service.d.ts +34 -0
  59. package/build/src/core/attachment_service.d.ts.map +1 -0
  60. package/build/src/core/attachment_service.js +93 -0
  61. package/build/src/core/attachment_service.js.map +1 -0
  62. package/build/src/core/attachment_state.d.ts +11 -0
  63. package/build/src/core/attachment_state.d.ts.map +1 -0
  64. package/build/src/core/attachment_state.js +17 -0
  65. package/build/src/core/attachment_state.js.map +1 -0
  66. package/build/src/core/index.d.ts +14 -0
  67. package/build/src/core/index.d.ts.map +1 -0
  68. package/build/src/core/index.js +11 -0
  69. package/build/src/core/index.js.map +1 -0
  70. package/build/src/core/queue.d.ts +20 -0
  71. package/build/src/core/queue.d.ts.map +1 -0
  72. package/build/src/{types/event.js → core/queue.js} +1 -0
  73. package/build/src/core/queue.js.map +1 -0
  74. package/build/src/core/storage.d.ts +23 -0
  75. package/build/src/core/storage.d.ts.map +1 -0
  76. package/build/src/{types/config.js → core/storage.js} +1 -0
  77. package/build/src/core/storage.js.map +1 -0
  78. package/build/src/define_config.d.ts +39 -20
  79. package/build/src/define_config.d.ts.map +1 -1
  80. package/build/src/define_config.js +46 -24
  81. package/build/src/define_config.js.map +1 -0
  82. package/build/src/integrations/lucid/attachment_column.d.ts +18 -0
  83. package/build/src/integrations/lucid/attachment_column.d.ts.map +1 -0
  84. package/build/src/integrations/lucid/attachment_column.js +151 -0
  85. package/build/src/integrations/lucid/attachment_column.js.map +1 -0
  86. package/build/src/integrations/lucid/attachment_model.d.ts +37 -0
  87. package/build/src/integrations/lucid/attachment_model.d.ts.map +1 -0
  88. package/build/src/integrations/lucid/attachment_model.js +99 -0
  89. package/build/src/integrations/lucid/attachment_model.js.map +1 -0
  90. package/build/src/integrations/lucid/attachment_owner.d.ts +18 -0
  91. package/build/src/integrations/lucid/attachment_owner.d.ts.map +1 -0
  92. package/build/src/integrations/lucid/attachment_owner.js +15 -0
  93. package/build/src/integrations/lucid/attachment_owner.js.map +1 -0
  94. package/build/src/integrations/lucid/attachment_relation.d.ts +60 -0
  95. package/build/src/integrations/lucid/attachment_relation.d.ts.map +1 -0
  96. package/build/src/integrations/lucid/attachment_relation.js +163 -0
  97. package/build/src/integrations/lucid/attachment_relation.js.map +1 -0
  98. package/build/src/integrations/lucid/attachments_table_stub.d.ts +21 -0
  99. package/build/src/integrations/lucid/attachments_table_stub.d.ts.map +1 -0
  100. package/build/src/integrations/lucid/attachments_table_stub.js +26 -0
  101. package/build/src/integrations/lucid/attachments_table_stub.js.map +1 -0
  102. package/build/src/integrations/lucid/create_legacy_attachment_migration_script.d.ts +13 -0
  103. package/build/src/integrations/lucid/create_legacy_attachment_migration_script.d.ts.map +1 -0
  104. package/build/src/integrations/lucid/create_legacy_attachment_migration_script.js +20 -0
  105. package/build/src/integrations/lucid/create_legacy_attachment_migration_script.js.map +1 -0
  106. package/build/src/integrations/lucid/index.d.ts +20 -0
  107. package/build/src/integrations/lucid/index.d.ts.map +1 -0
  108. package/build/src/integrations/lucid/index.js +20 -0
  109. package/build/src/integrations/lucid/index.js.map +1 -0
  110. package/build/src/integrations/lucid/lucid_attachment_lifecycle_service.d.ts +30 -0
  111. package/build/src/integrations/lucid/lucid_attachment_lifecycle_service.d.ts.map +1 -0
  112. package/build/src/integrations/lucid/lucid_attachment_lifecycle_service.js +188 -0
  113. package/build/src/integrations/lucid/lucid_attachment_lifecycle_service.js.map +1 -0
  114. package/build/src/integrations/lucid/lucid_attachment_repository.d.ts +18 -0
  115. package/build/src/integrations/lucid/lucid_attachment_repository.d.ts.map +1 -0
  116. package/build/src/integrations/lucid/lucid_attachment_repository.js +21 -0
  117. package/build/src/integrations/lucid/lucid_attachment_repository.js.map +1 -0
  118. package/build/src/integrations/lucid/lucid_attachment_store.d.ts +36 -0
  119. package/build/src/integrations/lucid/lucid_attachment_store.d.ts.map +1 -0
  120. package/build/src/integrations/lucid/lucid_attachment_store.js +179 -0
  121. package/build/src/integrations/lucid/lucid_attachment_store.js.map +1 -0
  122. package/build/src/integrations/lucid/lucid_variant_generation_service.d.ts +24 -0
  123. package/build/src/integrations/lucid/lucid_variant_generation_service.d.ts.map +1 -0
  124. package/build/src/integrations/lucid/lucid_variant_generation_service.js +42 -0
  125. package/build/src/integrations/lucid/lucid_variant_generation_service.js.map +1 -0
  126. package/build/src/integrations/lucid/migrate_legacy_attachment.d.ts +64 -0
  127. package/build/src/integrations/lucid/migrate_legacy_attachment.d.ts.map +1 -0
  128. package/build/src/integrations/lucid/migrate_legacy_attachment.js +89 -0
  129. package/build/src/integrations/lucid/migrate_legacy_attachment.js.map +1 -0
  130. package/build/src/integrations/lucid/migrate_legacy_attachment_records.d.ts +34 -0
  131. package/build/src/integrations/lucid/migrate_legacy_attachment_records.d.ts.map +1 -0
  132. package/build/src/integrations/lucid/migrate_legacy_attachment_records.js +47 -0
  133. package/build/src/integrations/lucid/migrate_legacy_attachment_records.js.map +1 -0
  134. package/build/src/integrations/lucid/render_legacy_attachment_migration_script.d.ts +11 -0
  135. package/build/src/integrations/lucid/render_legacy_attachment_migration_script.d.ts.map +1 -0
  136. package/build/src/integrations/lucid/render_legacy_attachment_migration_script.js +41 -0
  137. package/build/src/integrations/lucid/render_legacy_attachment_migration_script.js.map +1 -0
  138. package/build/src/queues/adonis_queue.d.ts +27 -0
  139. package/build/src/queues/adonis_queue.d.ts.map +1 -0
  140. package/build/src/queues/adonis_queue.js +22 -0
  141. package/build/src/queues/adonis_queue.js.map +1 -0
  142. package/build/src/queues/memory_queue.d.ts +22 -0
  143. package/build/src/queues/memory_queue.d.ts.map +1 -0
  144. package/build/src/queues/memory_queue.js +67 -0
  145. package/build/src/queues/memory_queue.js.map +1 -0
  146. package/build/src/sources/attachment_manager.d.ts +53 -0
  147. package/build/src/sources/attachment_manager.d.ts.map +1 -0
  148. package/build/src/sources/attachment_manager.js +177 -0
  149. package/build/src/sources/attachment_manager.js.map +1 -0
  150. package/build/src/variants/variant_converter.d.ts +23 -0
  151. package/build/src/variants/variant_converter.d.ts.map +1 -0
  152. package/build/src/{types/converter.js → variants/variant_converter.js} +1 -0
  153. package/build/src/variants/variant_converter.js.map +1 -0
  154. package/build/src/variants/variant_generation_service.d.ts +28 -0
  155. package/build/src/variants/variant_generation_service.d.ts.map +1 -0
  156. package/build/src/variants/variant_generation_service.js +44 -0
  157. package/build/src/variants/variant_generation_service.js.map +1 -0
  158. package/build/stubs/config/attachment.stub +12 -0
  159. package/build/stubs/main.d.ts.map +1 -1
  160. package/build/stubs/main.js +1 -0
  161. package/build/stubs/main.js.map +1 -0
  162. package/build/stubs/migrations/attachments_table.stub +39 -0
  163. package/build/tests/adonis_drive_storage.spec.d.ts +8 -0
  164. package/build/tests/adonis_drive_storage.spec.d.ts.map +1 -0
  165. package/build/tests/adonis_drive_storage.spec.js +69 -0
  166. package/build/tests/adonis_drive_storage.spec.js.map +1 -0
  167. package/build/{src/types/attachment.js → tests/adonis_queue.spec.d.ts} +1 -0
  168. package/build/tests/adonis_queue.spec.d.ts.map +1 -0
  169. package/build/tests/adonis_queue.spec.js +52 -0
  170. package/build/tests/adonis_queue.spec.js.map +1 -0
  171. package/build/tests/attachment_job_processor.spec.d.ts +8 -0
  172. package/build/tests/attachment_job_processor.spec.d.ts.map +1 -0
  173. package/build/tests/attachment_job_processor.spec.js +89 -0
  174. package/build/tests/attachment_job_processor.spec.js.map +1 -0
  175. package/build/tests/attachment_manager.spec.d.ts +8 -0
  176. package/build/tests/attachment_manager.spec.d.ts.map +1 -0
  177. package/build/tests/attachment_manager.spec.js +131 -0
  178. package/build/tests/attachment_manager.spec.js.map +1 -0
  179. package/build/tests/attachment_manager_service.spec.d.ts +8 -0
  180. package/build/tests/attachment_manager_service.spec.d.ts.map +1 -0
  181. package/build/tests/attachment_manager_service.spec.js +47 -0
  182. package/build/tests/attachment_manager_service.spec.js.map +1 -0
  183. package/build/tests/attachment_options.spec.d.ts +2 -0
  184. package/build/tests/attachment_options.spec.d.ts.map +1 -0
  185. package/build/tests/attachment_options.spec.js +31 -0
  186. package/build/tests/attachment_options.spec.js.map +1 -0
  187. package/build/tests/attachment_provider.spec.d.ts +8 -0
  188. package/build/tests/attachment_provider.spec.d.ts.map +1 -0
  189. package/build/tests/attachment_provider.spec.js +71 -0
  190. package/build/tests/attachment_provider.spec.js.map +1 -0
  191. package/build/tests/attachment_service.spec.d.ts +8 -0
  192. package/build/tests/attachment_service.spec.d.ts.map +1 -0
  193. package/build/tests/attachment_service.spec.js +146 -0
  194. package/build/tests/attachment_service.spec.js.map +1 -0
  195. package/build/tests/attachments_controller.spec.d.ts +8 -0
  196. package/build/tests/attachments_controller.spec.d.ts.map +1 -0
  197. package/build/tests/attachments_controller.spec.js +34 -0
  198. package/build/tests/attachments_controller.spec.js.map +1 -0
  199. package/build/tests/attachments_table_stub.spec.d.ts +2 -0
  200. package/build/tests/attachments_table_stub.spec.d.ts.map +1 -0
  201. package/build/tests/attachments_table_stub.spec.js +66 -0
  202. package/build/tests/attachments_table_stub.spec.js.map +1 -0
  203. package/build/tests/configure.spec.d.ts +2 -0
  204. package/build/tests/configure.spec.d.ts.map +1 -0
  205. package/build/tests/configure.spec.js +38 -0
  206. package/build/tests/configure.spec.js.map +1 -0
  207. package/build/tests/container_bindings.types.d.ts +8 -0
  208. package/build/tests/container_bindings.types.d.ts.map +1 -0
  209. package/build/tests/container_bindings.types.js +9 -0
  210. package/build/tests/container_bindings.types.js.map +1 -0
  211. package/build/tests/create_legacy_attachment_migration_script.spec.d.ts +8 -0
  212. package/build/tests/create_legacy_attachment_migration_script.spec.d.ts.map +1 -0
  213. package/build/tests/create_legacy_attachment_migration_script.spec.js +31 -0
  214. package/build/tests/create_legacy_attachment_migration_script.spec.js.map +1 -0
  215. package/build/tests/define_config.spec.d.ts +8 -0
  216. package/build/tests/define_config.spec.d.ts.map +1 -0
  217. package/build/tests/define_config.spec.js +203 -0
  218. package/build/tests/define_config.spec.js.map +1 -0
  219. package/build/tests/helpers/lucid_test_database.d.ts +9 -0
  220. package/build/tests/helpers/lucid_test_database.d.ts.map +1 -0
  221. package/build/tests/helpers/lucid_test_database.js +52 -0
  222. package/build/tests/helpers/lucid_test_database.js.map +1 -0
  223. package/build/tests/local_file_storage.spec.d.ts +8 -0
  224. package/build/tests/local_file_storage.spec.d.ts.map +1 -0
  225. package/build/tests/local_file_storage.spec.js +44 -0
  226. package/build/tests/local_file_storage.spec.js.map +1 -0
  227. package/build/tests/lucid_attachment_collection_store.spec.d.ts +2 -0
  228. package/build/tests/lucid_attachment_collection_store.spec.d.ts.map +1 -0
  229. package/build/tests/lucid_attachment_collection_store.spec.js +52 -0
  230. package/build/tests/lucid_attachment_collection_store.spec.js.map +1 -0
  231. package/build/tests/lucid_attachment_column.spec.d.ts +8 -0
  232. package/build/tests/lucid_attachment_column.spec.d.ts.map +1 -0
  233. package/build/tests/lucid_attachment_column.spec.js +193 -0
  234. package/build/tests/lucid_attachment_column.spec.js.map +1 -0
  235. package/build/tests/lucid_attachment_lifecycle_service.spec.d.ts +8 -0
  236. package/build/tests/lucid_attachment_lifecycle_service.spec.d.ts.map +1 -0
  237. package/build/tests/lucid_attachment_lifecycle_service.spec.js +378 -0
  238. package/build/tests/lucid_attachment_lifecycle_service.spec.js.map +1 -0
  239. package/build/tests/lucid_attachment_relation.spec.d.ts +8 -0
  240. package/build/tests/lucid_attachment_relation.spec.d.ts.map +1 -0
  241. package/build/tests/lucid_attachment_relation.spec.js +216 -0
  242. package/build/tests/lucid_attachment_relation.spec.js.map +1 -0
  243. package/build/tests/lucid_attachment_repository.spec.d.ts +8 -0
  244. package/build/tests/lucid_attachment_repository.spec.d.ts.map +1 -0
  245. package/build/tests/lucid_attachment_repository.spec.js +50 -0
  246. package/build/tests/lucid_attachment_repository.spec.js.map +1 -0
  247. package/build/tests/lucid_attachment_store.spec.d.ts +8 -0
  248. package/build/tests/lucid_attachment_store.spec.d.ts.map +1 -0
  249. package/build/tests/lucid_attachment_store.spec.js +73 -0
  250. package/build/tests/lucid_attachment_store.spec.js.map +1 -0
  251. package/build/tests/lucid_sqlite_integration.spec.d.ts +8 -0
  252. package/build/tests/lucid_sqlite_integration.spec.d.ts.map +1 -0
  253. package/build/tests/lucid_sqlite_integration.spec.js +103 -0
  254. package/build/tests/lucid_sqlite_integration.spec.js.map +1 -0
  255. package/build/tests/lucid_variant_generation_service.spec.d.ts +8 -0
  256. package/build/tests/lucid_variant_generation_service.spec.d.ts.map +1 -0
  257. package/build/tests/lucid_variant_generation_service.spec.js +56 -0
  258. package/build/tests/lucid_variant_generation_service.spec.js.map +1 -0
  259. package/build/tests/memory_queue.spec.d.ts +8 -0
  260. package/build/tests/memory_queue.spec.d.ts.map +1 -0
  261. package/build/tests/memory_queue.spec.js +52 -0
  262. package/build/tests/memory_queue.spec.js.map +1 -0
  263. package/build/tests/migrate_legacy_attachment.spec.d.ts +8 -0
  264. package/build/tests/migrate_legacy_attachment.spec.d.ts.map +1 -0
  265. package/build/tests/migrate_legacy_attachment.spec.js +133 -0
  266. package/build/tests/migrate_legacy_attachment.spec.js.map +1 -0
  267. package/build/tests/migrate_legacy_attachment_records.spec.d.ts +8 -0
  268. package/build/tests/migrate_legacy_attachment_records.spec.d.ts.map +1 -0
  269. package/build/tests/migrate_legacy_attachment_records.spec.js +66 -0
  270. package/build/tests/migrate_legacy_attachment_records.spec.js.map +1 -0
  271. package/build/tests/package_exports.spec.d.ts +8 -0
  272. package/build/tests/package_exports.spec.d.ts.map +1 -0
  273. package/build/tests/package_exports.spec.js +31 -0
  274. package/build/tests/package_exports.spec.js.map +1 -0
  275. package/build/tests/variant_generation_service.spec.d.ts +8 -0
  276. package/build/tests/variant_generation_service.spec.d.ts.map +1 -0
  277. package/build/tests/variant_generation_service.spec.js +79 -0
  278. package/build/tests/variant_generation_service.spec.js.map +1 -0
  279. package/package.json +82 -76
  280. package/build/commands/make/converter.d.ts.map +0 -1
  281. package/build/commands/make/converter.js +0 -28
  282. package/build/services/regenerate_service.d.ts +0 -9
  283. package/build/services/regenerate_service.d.ts.map +0 -1
  284. package/build/services/regenerate_service.js +0 -29
  285. package/build/src/adapters/blurhash.d.ts +0 -11
  286. package/build/src/adapters/blurhash.d.ts.map +0 -1
  287. package/build/src/adapters/blurhash.js +0 -12
  288. package/build/src/adapters/exif.d.ts +0 -15
  289. package/build/src/adapters/exif.d.ts.map +0 -1
  290. package/build/src/adapters/exif.js +0 -165
  291. package/build/src/adapters/ffmpeg.d.ts +0 -19
  292. package/build/src/adapters/ffmpeg.d.ts.map +0 -1
  293. package/build/src/adapters/ffmpeg.js +0 -115
  294. package/build/src/adapters/lock.d.ts +0 -9
  295. package/build/src/adapters/lock.d.ts.map +0 -1
  296. package/build/src/adapters/lock.js +0 -21
  297. package/build/src/adapters/meta.d.ts +0 -10
  298. package/build/src/adapters/meta.d.ts.map +0 -1
  299. package/build/src/adapters/meta.js +0 -49
  300. package/build/src/adapters/poppler.d.ts +0 -20
  301. package/build/src/adapters/poppler.d.ts.map +0 -1
  302. package/build/src/adapters/poppler.js +0 -117
  303. package/build/src/adapters/soffice.d.ts +0 -14
  304. package/build/src/adapters/soffice.d.ts.map +0 -1
  305. package/build/src/adapters/soffice.js +0 -64
  306. package/build/src/attachment_manager.d.ts +0 -50
  307. package/build/src/attachment_manager.d.ts.map +0 -1
  308. package/build/src/attachment_manager.js +0 -145
  309. package/build/src/attachments/attachment.d.ts +0 -42
  310. package/build/src/attachments/attachment.d.ts.map +0 -1
  311. package/build/src/attachments/attachment.js +0 -233
  312. package/build/src/attachments/attachment_base.d.ts +0 -59
  313. package/build/src/attachments/attachment_base.d.ts.map +0 -1
  314. package/build/src/attachments/attachment_base.js +0 -211
  315. package/build/src/attachments/variant_attachment.d.ts +0 -27
  316. package/build/src/attachments/variant_attachment.d.ts.map +0 -1
  317. package/build/src/attachments/variant_attachment.js +0 -40
  318. package/build/src/converters/autodetect_converter.d.ts +0 -13
  319. package/build/src/converters/autodetect_converter.d.ts.map +0 -1
  320. package/build/src/converters/autodetect_converter.js +0 -77
  321. package/build/src/converters/converter.d.ts +0 -14
  322. package/build/src/converters/converter.d.ts.map +0 -1
  323. package/build/src/converters/converter.js +0 -14
  324. package/build/src/converters/document_thumbnail_converter.d.ts +0 -14
  325. package/build/src/converters/document_thumbnail_converter.d.ts.map +0 -1
  326. package/build/src/converters/document_thumbnail_converter.js +0 -36
  327. package/build/src/converters/image_converter.d.ts +0 -13
  328. package/build/src/converters/image_converter.d.ts.map +0 -1
  329. package/build/src/converters/image_converter.js +0 -27
  330. package/build/src/converters/pdf_thumbnail_converter.d.ts +0 -14
  331. package/build/src/converters/pdf_thumbnail_converter.d.ts.map +0 -1
  332. package/build/src/converters/pdf_thumbnail_converter.js +0 -39
  333. package/build/src/converters/video_thumbnail_converter.d.ts +0 -14
  334. package/build/src/converters/video_thumbnail_converter.d.ts.map +0 -1
  335. package/build/src/converters/video_thumbnail_converter.js +0 -40
  336. package/build/src/decorators/attachment.d.ts +0 -15
  337. package/build/src/decorators/attachment.d.ts.map +0 -1
  338. package/build/src/decorators/attachment.js +0 -103
  339. package/build/src/errors.d.ts +0 -67
  340. package/build/src/errors.d.ts.map +0 -1
  341. package/build/src/errors.js +0 -68
  342. package/build/src/services/attachment/attachment_detachment_service.d.ts +0 -19
  343. package/build/src/services/attachment/attachment_detachment_service.d.ts.map +0 -1
  344. package/build/src/services/attachment/attachment_detachment_service.js +0 -66
  345. package/build/src/services/attachment/attachment_persister_service.d.ts +0 -22
  346. package/build/src/services/attachment/attachment_persister_service.d.ts.map +0 -1
  347. package/build/src/services/attachment/attachment_persister_service.js +0 -96
  348. package/build/src/services/attachment/attachment_recorder_service.d.ts +0 -68
  349. package/build/src/services/attachment/attachment_recorder_service.d.ts.map +0 -1
  350. package/build/src/services/attachment/attachment_recorder_service.js +0 -121
  351. package/build/src/services/attachment/attachment_transaction_service.d.ts +0 -26
  352. package/build/src/services/attachment/attachment_transaction_service.d.ts.map +0 -1
  353. package/build/src/services/attachment/attachment_transaction_service.js +0 -46
  354. package/build/src/services/attachment/attachment_utils.d.ts +0 -35
  355. package/build/src/services/attachment/attachment_utils.d.ts.map +0 -1
  356. package/build/src/services/attachment/attachment_utils.js +0 -71
  357. package/build/src/services/attachment/attachment_variant_service.d.ts +0 -17
  358. package/build/src/services/attachment/attachment_variant_service.d.ts.map +0 -1
  359. package/build/src/services/attachment/attachment_variant_service.js +0 -99
  360. package/build/src/services/attachment/index.d.ts +0 -15
  361. package/build/src/services/attachment/index.d.ts.map +0 -1
  362. package/build/src/services/attachment/index.js +0 -15
  363. package/build/src/services/attachment_service.d.ts +0 -8
  364. package/build/src/services/attachment_service.d.ts.map +0 -1
  365. package/build/src/services/attachment_service.js +0 -7
  366. package/build/src/services/variant/variant_generator_service.d.ts +0 -24
  367. package/build/src/services/variant/variant_generator_service.d.ts.map +0 -1
  368. package/build/src/services/variant/variant_generator_service.js +0 -101
  369. package/build/src/services/variant/variant_persister_service.d.ts +0 -24
  370. package/build/src/services/variant/variant_persister_service.d.ts.map +0 -1
  371. package/build/src/services/variant/variant_persister_service.js +0 -59
  372. package/build/src/services/variant/variant_purger_service.d.ts +0 -15
  373. package/build/src/services/variant/variant_purger_service.d.ts.map +0 -1
  374. package/build/src/services/variant/variant_purger_service.js +0 -47
  375. package/build/src/services/variant_service.d.ts +0 -13
  376. package/build/src/services/variant_service.d.ts.map +0 -1
  377. package/build/src/services/variant_service.js +0 -63
  378. package/build/src/types/attachment.d.ts +0 -100
  379. package/build/src/types/attachment.d.ts.map +0 -1
  380. package/build/src/types/config.d.ts +0 -58
  381. package/build/src/types/config.d.ts.map +0 -1
  382. package/build/src/types/converter.d.ts +0 -144
  383. package/build/src/types/converter.d.ts.map +0 -1
  384. package/build/src/types/drive.d.ts +0 -6
  385. package/build/src/types/drive.d.ts.map +0 -1
  386. package/build/src/types/drive.js +0 -1
  387. package/build/src/types/event.d.ts +0 -16
  388. package/build/src/types/event.d.ts.map +0 -1
  389. package/build/src/types/index.d.ts +0 -15
  390. package/build/src/types/index.d.ts.map +0 -1
  391. package/build/src/types/index.js +0 -14
  392. package/build/src/types/input.d.ts +0 -35
  393. package/build/src/types/input.d.ts.map +0 -1
  394. package/build/src/types/input.js +0 -7
  395. package/build/src/types/lock.d.ts +0 -14
  396. package/build/src/types/lock.d.ts.map +0 -1
  397. package/build/src/types/lock.js +0 -7
  398. package/build/src/types/metadata.d.ts +0 -24
  399. package/build/src/types/metadata.d.ts.map +0 -1
  400. package/build/src/types/metadata.js +0 -7
  401. package/build/src/types/mixin.d.ts +0 -17
  402. package/build/src/types/mixin.d.ts.map +0 -1
  403. package/build/src/types/mixin.js +0 -7
  404. package/build/src/types/regenerate.d.ts +0 -12
  405. package/build/src/types/regenerate.d.ts.map +0 -1
  406. package/build/src/types/regenerate.js +0 -7
  407. package/build/src/types/service.d.ts +0 -25
  408. package/build/src/types/service.d.ts.map +0 -1
  409. package/build/src/types/service.js +0 -7
  410. package/build/src/utils/default_values.d.ts +0 -20
  411. package/build/src/utils/default_values.d.ts.map +0 -1
  412. package/build/src/utils/default_values.js +0 -19
  413. package/build/src/utils/helpers.d.ts +0 -19
  414. package/build/src/utils/helpers.d.ts.map +0 -1
  415. package/build/src/utils/helpers.js +0 -131
  416. package/build/src/utils/hooks.d.ts +0 -12
  417. package/build/src/utils/hooks.d.ts.map +0 -1
  418. package/build/src/utils/hooks.js +0 -42
  419. package/build/src/utils/symbols.d.ts +0 -8
  420. package/build/src/utils/symbols.d.ts.map +0 -1
  421. package/build/src/utils/symbols.js +0 -7
  422. package/build/stubs/config.stub +0 -140
  423. package/build/stubs/make/converter/main.stub +0 -20
  424. package/build/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,66 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { test } from '@japa/runner';
4
+ import MakeAttachmentsTable from '../commands/make/attachments_table.js';
5
+ import { stubsRoot } from '../stubs/main.js';
6
+ import { createAttachmentsTableStubState } from '../src/integrations/lucid/attachments_table_stub.js';
7
+ test.group('attachments table migration stub', () => {
8
+ test('prepares a timestamped destination and template state', ({ assert }) => {
9
+ const state = createAttachmentsTableStubState({
10
+ directory: '/app/database/migrations',
11
+ tableName: 'media_attachments',
12
+ timestamp: 1700000000000,
13
+ });
14
+ assert.deepEqual(state, {
15
+ destination: '/app/database/migrations/1700000000000_create_media_attachments_table.ts',
16
+ tableName: 'media_attachments',
17
+ className: 'MediaAttachments',
18
+ });
19
+ });
20
+ test('rejects unsafe table names', ({ assert }) => {
21
+ assert.throws(() => createAttachmentsTableStubState({ directory: '/app', tableName: 'attachments; drop table users' }), 'Lucid attachment table names must be snake_case identifiers');
22
+ });
23
+ test('contains the polymorphic attachment schema', async ({ assert }) => {
24
+ const stub = await readFile(join(stubsRoot, 'migrations/attachments_table.stub'), 'utf8');
25
+ assert.include(stub, 'exports({ to: destination })');
26
+ assert.include(stub, 'Create{{ className }}Table');
27
+ assert.include(stub, "protected tableName = '{{ tableName }}'");
28
+ assert.include(stub, "table.string('attachable_type').notNullable()");
29
+ assert.include(stub, "table.integer('position').unsigned().nullable()");
30
+ assert.include(stub, "table.uuid('parent_id').nullable()");
31
+ assert.include(stub, "table.unique(['parent_id', 'variant_key'])");
32
+ });
33
+ test('uses the package stub from the Ace command', async ({ assert }) => {
34
+ const generated = [];
35
+ const messages = [];
36
+ await MakeAttachmentsTable.prototype.run.call({
37
+ parsed: { flags: { table: 'media_attachments', folder: 'database/migrations' } },
38
+ app: { makePath: (path) => `/app/${path}` },
39
+ async createCodemods() {
40
+ return {
41
+ async makeUsingStub(root, path, state) {
42
+ generated.push({ root, path, state });
43
+ },
44
+ };
45
+ },
46
+ logger: {
47
+ success(message) {
48
+ messages.push(message);
49
+ },
50
+ },
51
+ });
52
+ assert.lengthOf(generated, 1);
53
+ const stub = generated[0];
54
+ const message = messages[0];
55
+ if (!stub || !message) {
56
+ throw new Error('The command must generate one migration and report its path');
57
+ }
58
+ assert.equal(stub.root, stubsRoot);
59
+ assert.equal(stub.path, 'migrations/attachments_table.stub');
60
+ assert.equal(stub.state.tableName, 'media_attachments');
61
+ assert.equal(stub.state.className, 'MediaAttachments');
62
+ assert.match(String(stub.state.destination), /^\/app\/database\/migrations\/\d+_create_media_attachments_table\.ts$/);
63
+ assert.match(message, /^Created \/app\/database\/migrations\//);
64
+ });
65
+ });
66
+ //# sourceMappingURL=attachments_table_stub.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments_table_stub.spec.js","sourceRoot":"","sources":["../../tests/attachments_table_stub.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=configure.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.spec.d.ts","sourceRoot":"","sources":["../../tests/configure.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { access, readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { test } from '@japa/runner';
4
+ import { configure } from '../configure.js';
5
+ import { stubsRoot } from '../stubs/main.js';
6
+ test.group('configure', () => {
7
+ test('generates the default attachment config and registers package integrations', async ({ assert }) => {
8
+ const stubs = [];
9
+ const providers = [];
10
+ const commands = [];
11
+ await configure({
12
+ async createCodemods() {
13
+ return {
14
+ async makeUsingStub(root, path, state) {
15
+ stubs.push({ root, path, state });
16
+ },
17
+ async updateRcFile(callback) {
18
+ callback({
19
+ addProvider(value) {
20
+ providers.push(value);
21
+ },
22
+ addCommand(value) {
23
+ commands.push(value);
24
+ },
25
+ });
26
+ },
27
+ };
28
+ },
29
+ });
30
+ assert.deepEqual(stubs, [{ root: stubsRoot, path: 'config/attachment.stub', state: {} }]);
31
+ assert.deepEqual(providers, ['@jrmc/adonis-attachment/attachment_provider']);
32
+ assert.deepEqual(commands, ['@jrmc/adonis-attachment/commands']);
33
+ await access(join(stubsRoot, 'config/attachment.stub'));
34
+ assert.include(await readFile(join(stubsRoot, 'config/attachment.stub'), 'utf8'), 'storage: LocalFileStorage.fromApp');
35
+ assert.notInclude(await readFile(join(stubsRoot, 'config/attachment.stub'), 'utf8'), 'maxBytes');
36
+ });
37
+ });
38
+ //# sourceMappingURL=configure.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.spec.js","sourceRoot":"","sources":["../../tests/configure.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE;IAC3B,IAAI,CAAC,4EAA4E,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACtG,MAAM,KAAK,GAA0E,EAAE,CAAA;QACvF,MAAM,SAAS,GAAa,EAAE,CAAA;QAC9B,MAAM,QAAQ,GAAa,EAAE,CAAA;QAE7B,MAAM,SAAS,CAAC;YACd,KAAK,CAAC,cAAc;gBAClB,OAAO;oBACL,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,IAAY,EAAE,KAA8B;wBAC5E,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;oBACnC,CAAC;oBACD,KAAK,CAAC,YAAY,CAAC,QAAiG;wBAClH,QAAQ,CAAC;4BACP,WAAW,CAAC,KAAK;gCACf,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;4BACvB,CAAC;4BACD,UAAU,CAAC,KAAK;gCACd,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;4BACtB,CAAC;yBACF,CAAC,CAAA;oBACJ,CAAC;iBACF,CAAA;YACH,CAAC;SACO,CAAC,CAAA;QAEX,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QACzF,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,6CAA6C,CAAC,CAAC,CAAA;QAC5E,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,kCAAkC,CAAC,CAAC,CAAA;QAChE,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC,CAAA;QACvD,MAAM,CAAC,OAAO,CACZ,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,EAAE,MAAM,CAAC,EACjE,mCAAmC,CACpC,CAAA;QACD,MAAM,CAAC,UAAU,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,CAAA;IAClG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @jrmc/adonis-attachment
3
+ *
4
+ * @license MIT
5
+ * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=container_bindings.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container_bindings.types.d.ts","sourceRoot":"","sources":["../../tests/container_bindings.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,OAAO,EAAE,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @jrmc/adonis-attachment
3
+ *
4
+ * @license MIT
5
+ * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
+ */
7
+ const resolvedManager = app.container.make('jrmc.attachment.manager');
8
+ export {};
9
+ //# sourceMappingURL=container_bindings.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container_bindings.types.js","sourceRoot":"","sources":["../../tests/container_bindings.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,MAAM,eAAe,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @jrmc/adonis-attachment
3
+ *
4
+ * @license MIT
5
+ * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=create_legacy_attachment_migration_script.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_legacy_attachment_migration_script.spec.d.ts","sourceRoot":"","sources":["../../tests/create_legacy_attachment_migration_script.spec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @jrmc/adonis-attachment
3
+ *
4
+ * @license MIT
5
+ * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
+ */
7
+ import { mkdtemp, readFile, rm } from 'node:fs/promises';
8
+ import { tmpdir } from 'node:os';
9
+ import { join } from 'node:path';
10
+ import { test } from '@japa/runner';
11
+ import { createLegacyAttachmentMigrationScript } from '../src/integrations/lucid/index.js';
12
+ test.group('createLegacyAttachmentMigrationScript', () => {
13
+ test('writes a timestamped migration script template', async ({ assert }) => {
14
+ const directory = await mkdtemp(join(tmpdir(), 'adonis-attachment-'));
15
+ try {
16
+ const filePath = await createLegacyAttachmentMigrationScript({
17
+ directory,
18
+ defaultDisk: 's3',
19
+ timestamp: 1700000000000,
20
+ });
21
+ assert.equal(filePath, join(directory, '1700000000000_migrate_v5_attachments.ts'));
22
+ const contents = await readFile(filePath, 'utf8');
23
+ assert.include(contents, "defaultDisk: 's3'");
24
+ assert.include(contents, 'migrateLegacyAttachmentRecords');
25
+ }
26
+ finally {
27
+ await rm(directory, { recursive: true, force: true });
28
+ }
29
+ });
30
+ });
31
+ //# sourceMappingURL=create_legacy_attachment_migration_script.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_legacy_attachment_migration_script.spec.js","sourceRoot":"","sources":["../../tests/create_legacy_attachment_migration_script.spec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAE,qCAAqC,EAAE,MAAM,oCAAoC,CAAA;AAE1F,IAAI,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACvD,IAAI,CAAC,gDAAgD,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1E,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAA;QAErE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,qCAAqC,CAAC;gBAC3D,SAAS;gBACT,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,aAAa;aACzB,CAAC,CAAA;YAEF,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,yCAAyC,CAAC,CAAC,CAAA;YAClF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;YACjD,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAA;YAC7C,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CAAA;QAC5D,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACvD,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @jrmc/adonis-attachment
3
+ *
4
+ * @license MIT
5
+ * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=define_config.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define_config.spec.d.ts","sourceRoot":"","sources":["../../tests/define_config.spec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * @jrmc/adonis-attachment
3
+ *
4
+ * @license MIT
5
+ * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
+ */
7
+ import { configProvider } from '@adonisjs/core';
8
+ import { test } from '@japa/runner';
9
+ import { AdonisDriveStorage, AttachmentJobProcessor, defineConfig, MemoryAttachmentQueue, } from '../index.js';
10
+ test.group('defineConfig', () => {
11
+ test('uses the default disk resolved from Drive config', async ({ assert }) => {
12
+ const disks = [];
13
+ const drive = {
14
+ use(disk) {
15
+ disks.push(disk ?? 'default');
16
+ return {
17
+ async put() { },
18
+ async getBytes() {
19
+ return new Uint8Array();
20
+ },
21
+ async delete() { },
22
+ };
23
+ },
24
+ };
25
+ const config = defineConfig({
26
+ storage: AdonisDriveStorage.fromApp,
27
+ });
28
+ const resolved = await config.resolver({
29
+ config: {
30
+ get(binding) {
31
+ assert.equal(binding, 'drive');
32
+ return configProvider.create(async () => ({ config: { default: 's3' } }));
33
+ },
34
+ },
35
+ container: {
36
+ async make(binding) {
37
+ assert.equal(binding, 'drive.manager');
38
+ return drive;
39
+ },
40
+ },
41
+ });
42
+ assert.equal(resolved.defaultDisk, 's3');
43
+ await resolved.storage.write({
44
+ disk: resolved.defaultDisk,
45
+ path: 'attachments/avatar.png',
46
+ body: new Uint8Array(),
47
+ mimeType: 'image/png',
48
+ });
49
+ assert.deepEqual(disks, ['s3']);
50
+ });
51
+ test('uses fs when storage does not define a default disk', async ({ assert }) => {
52
+ const storage = {
53
+ async write() { },
54
+ async read() {
55
+ return new Uint8Array();
56
+ },
57
+ async remove() { },
58
+ };
59
+ const resolved = await defineConfig({ storage }).resolver({});
60
+ assert.equal(resolved.defaultDisk, 'fs');
61
+ });
62
+ test('resolves direct storage and queue integrations', async ({ assert }) => {
63
+ const storage = {
64
+ async write() { },
65
+ async read() {
66
+ return new Uint8Array();
67
+ },
68
+ async remove() { },
69
+ };
70
+ const queue = {
71
+ async enqueue(_job) { },
72
+ };
73
+ const config = defineConfig({ defaultDisk: 'public', storage, queue });
74
+ const resolved = await config.resolver({});
75
+ assert.equal(resolved.defaultDisk, 'public');
76
+ assert.equal(resolved.storage, storage);
77
+ assert.equal(resolved.queue, queue);
78
+ assert.deepEqual(resolved.route, { path: '/attachments/:id' });
79
+ });
80
+ test('resolves integrations from the application at boot time', async ({ assert }) => {
81
+ const storage = {
82
+ async write() { },
83
+ async read() {
84
+ return new Uint8Array();
85
+ },
86
+ async remove() { },
87
+ };
88
+ const queue = {
89
+ async enqueue(_job) { },
90
+ };
91
+ const app = { marker: 'application' };
92
+ const config = defineConfig({
93
+ defaultDisk: 'public',
94
+ storage(resolvedApp) {
95
+ assert.equal(resolvedApp, app);
96
+ return storage;
97
+ },
98
+ async queue(resolvedApp) {
99
+ assert.equal(resolvedApp, app);
100
+ return queue;
101
+ },
102
+ });
103
+ const resolved = await config.resolver(app);
104
+ assert.equal(resolved.storage, storage);
105
+ assert.equal(resolved.queue, queue);
106
+ });
107
+ test('uses the in-memory queue by default', async ({ assert }) => {
108
+ const storage = {
109
+ async write() { },
110
+ async read() {
111
+ return new Uint8Array();
112
+ },
113
+ async remove() { },
114
+ };
115
+ const config = defineConfig({ defaultDisk: 'public', storage, queueConcurrency: 2 });
116
+ const resolved = await config.resolver({});
117
+ assert.instanceOf(resolved.queue, MemoryAttachmentQueue);
118
+ });
119
+ test('allows applications to disable or prefix the read route', async ({ assert }) => {
120
+ const storage = {
121
+ async write() { },
122
+ async read() {
123
+ return new Uint8Array();
124
+ },
125
+ async remove() { },
126
+ };
127
+ const disabled = await defineConfig({
128
+ defaultDisk: 'public',
129
+ storage,
130
+ route: false,
131
+ }).resolver({});
132
+ const prefixed = await defineConfig({
133
+ defaultDisk: 'public',
134
+ storage,
135
+ route: { prefix: '/media/files/' },
136
+ }).resolver({});
137
+ assert.isFalse(disabled.route);
138
+ assert.deepEqual(prefixed.route, { path: '/media/files/:id' });
139
+ });
140
+ test('preserves source-manager options', async ({ assert }) => {
141
+ const storage = {
142
+ async write() { },
143
+ async read() {
144
+ return new Uint8Array();
145
+ },
146
+ async remove() { },
147
+ };
148
+ const sources = { maxBytes: 10 * 1024 * 1024 };
149
+ const resolved = await defineConfig({ defaultDisk: 'public', storage, sources }).resolver({});
150
+ assert.equal(resolved.sources, sources);
151
+ });
152
+ test('preserves attachment persistence defaults', async ({ assert }) => {
153
+ const storage = {
154
+ async write() { },
155
+ async read() {
156
+ return new Uint8Array();
157
+ },
158
+ async remove() { },
159
+ };
160
+ const defaults = { folder: 'attachments', variants: ['thumbnail'] };
161
+ const resolved = await defineConfig({ defaultDisk: 'public', storage, defaults }).resolver({});
162
+ assert.equal(resolved.defaults, defaults);
163
+ });
164
+ test('rejects invalid route prefixes', async ({ assert }) => {
165
+ const storage = {
166
+ async write() { },
167
+ async read() {
168
+ return new Uint8Array();
169
+ },
170
+ async remove() { },
171
+ };
172
+ await assert.rejects(() => defineConfig({ defaultDisk: 'public', storage, route: { prefix: 'attachments/:id' } }).resolver({}), 'Attachment route prefix must start with "/" and cannot contain parameters');
173
+ });
174
+ test('uses the configured processor as the memory queue handler', async ({ assert }) => {
175
+ const storage = {
176
+ async write() { },
177
+ async read() {
178
+ return new Uint8Array();
179
+ },
180
+ async remove() { },
181
+ };
182
+ const processed = [];
183
+ const processor = new AttachmentJobProcessor({
184
+ attachments: {
185
+ async findById() {
186
+ return null;
187
+ },
188
+ },
189
+ variants: {
190
+ async generate() { },
191
+ },
192
+ });
193
+ processor.process = async (job) => {
194
+ processed.push(job);
195
+ };
196
+ const config = defineConfig({ defaultDisk: 'public', storage, processor });
197
+ const resolved = await config.resolver({});
198
+ await resolved.queue.enqueue({ type: 'generate-variants', attachmentId: 'attachment-id' });
199
+ await resolved.queue.drain();
200
+ assert.deepEqual(processed, [{ type: 'generate-variants', attachmentId: 'attachment-id' }]);
201
+ });
202
+ });
203
+ //# sourceMappingURL=define_config.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define_config.spec.js","sourceRoot":"","sources":["../../tests/define_config.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @jrmc/adonis-attachment
3
+ *
4
+ * @license MIT
5
+ * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
+ */
7
+ import { Database } from '@adonisjs/lucid/database';
8
+ export declare function createLucidTestDatabase(): Promise<Database>;
9
+ //# sourceMappingURL=lucid_test_database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lucid_test_database.d.ts","sourceRoot":"","sources":["../../../tests/helpers/lucid_test_database.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAInD,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,QAAQ,CAAC,CAiDjE"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @jrmc/adonis-attachment
3
+ *
4
+ * @license MIT
5
+ * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
+ */
7
+ import { Database } from '@adonisjs/lucid/database';
8
+ import { AttachmentModel } from '../../src/integrations/lucid/attachment_model.js';
9
+ export async function createLucidTestDatabase() {
10
+ const database = new Database({
11
+ connection: 'sqlite',
12
+ connections: {
13
+ sqlite: {
14
+ client: 'better-sqlite3',
15
+ connection: { filename: ':memory:' },
16
+ useNullAsDefault: true,
17
+ },
18
+ },
19
+ }, { trace() { } }, {
20
+ async emit() { },
21
+ async emitSerial() { },
22
+ hasListeners() {
23
+ return false;
24
+ },
25
+ });
26
+ AttachmentModel.useAdapter(database.modelAdapter());
27
+ await database.connection().schema.createTable('attachments', (table) => {
28
+ table.string('id').primary();
29
+ table.string('attachable_type').notNullable();
30
+ table.string('attachable_id').notNullable();
31
+ table.string('field').notNullable();
32
+ table.string('owner_key', 64).nullable().unique();
33
+ table.integer('position').unsigned().nullable();
34
+ table.string('parent_id').nullable().references('id').inTable('attachments').onDelete('CASCADE');
35
+ table.string('variant_key').nullable();
36
+ table.string('disk').notNullable();
37
+ table.string('path').notNullable();
38
+ table.string('name').notNullable();
39
+ table.string('original_name').notNullable();
40
+ table.string('mime_type').notNullable();
41
+ table.string('extname').notNullable();
42
+ table.bigInteger('size').unsigned().notNullable();
43
+ table.json('metadata').nullable();
44
+ table.timestamp('created_at').notNullable();
45
+ table.timestamp('updated_at').notNullable();
46
+ table.index(['attachable_type', 'attachable_id', 'field']);
47
+ table.index(['parent_id']);
48
+ table.unique(['parent_id', 'variant_key']);
49
+ });
50
+ return database;
51
+ }
52
+ //# sourceMappingURL=lucid_test_database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lucid_test_database.js","sourceRoot":"","sources":["../../../tests/helpers/lucid_test_database.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAA;AAElF,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAC3B;QACE,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE;YACX,MAAM,EAAE;gBACN,MAAM,EAAE,gBAAgB;gBACxB,UAAU,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;gBACpC,gBAAgB,EAAE,IAAI;aACvB;SACF;KACF,EACD,EAAE,KAAK,KAAI,CAAC,EAAW,EACvB;QACE,KAAK,CAAC,IAAI,KAAI,CAAC;QACf,KAAK,CAAC,UAAU,KAAI,CAAC;QACrB,YAAY;YACV,OAAO,KAAK,CAAA;QACd,CAAC;KACO,CACX,CAAA;IAED,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAA;IAEnD,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;QACtE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;QAC5B,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAA;QAC7C,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAA;QAC3C,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;QACnC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAA;QACjD,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAA;QAC/C,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAChG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAA;QACtC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;QAClC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;QAClC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;QAClC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAA;QAC3C,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAA;QACvC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;QACrC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAA;QACjD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAA;QACjC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;QAC3C,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;QAC3C,KAAK,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAA;QAC1D,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;QAC1B,KAAK,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @jrmc/adonis-attachment
3
+ *
4
+ * @license MIT
5
+ * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=local_file_storage.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local_file_storage.spec.d.ts","sourceRoot":"","sources":["../../tests/local_file_storage.spec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @jrmc/adonis-attachment
3
+ *
4
+ * @license MIT
5
+ * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
+ */
7
+ import { access, mkdtemp, readFile, rm } from 'node:fs/promises';
8
+ import { tmpdir } from 'node:os';
9
+ import { join } from 'node:path';
10
+ import { test } from '@japa/runner';
11
+ import { LocalFileStorage } from '../index.js';
12
+ test.group('LocalFileStorage', () => {
13
+ test('writes, reads, and removes attachments below its root directory', async ({ assert }) => {
14
+ const location = await mkdtemp(join(tmpdir(), 'adonis-attachment-'));
15
+ const storage = new LocalFileStorage({ location });
16
+ try {
17
+ await storage.write({
18
+ disk: 'fs',
19
+ path: 'users/42/avatar.png',
20
+ body: new Uint8Array([1, 2, 3]),
21
+ mimeType: 'image/png',
22
+ });
23
+ assert.deepEqual(await storage.read({ disk: 'fs', path: 'users/42/avatar.png' }), new Uint8Array([1, 2, 3]));
24
+ assert.deepEqual(await readFile(join(location, 'users/42/avatar.png')), Buffer.from([1, 2, 3]));
25
+ await storage.remove({ disk: 'fs', path: 'users/42/avatar.png' });
26
+ await assert.rejects(() => access(join(location, 'users/42/avatar.png')));
27
+ }
28
+ finally {
29
+ await rm(location, { recursive: true, force: true });
30
+ }
31
+ });
32
+ test('rejects paths outside its root and unsupported disks', async ({ assert }) => {
33
+ const location = await mkdtemp(join(tmpdir(), 'adonis-attachment-'));
34
+ const storage = new LocalFileStorage({ location });
35
+ try {
36
+ await assert.rejects(() => storage.write({ disk: 'fs', path: '../outside.txt', body: new Uint8Array(), mimeType: 'text/plain' }), 'Attachment paths must stay inside the local storage directory');
37
+ await assert.rejects(() => storage.write({ disk: 's3', path: 'avatar.txt', body: new Uint8Array(), mimeType: 'text/plain' }), 'LocalFileStorage cannot access the "s3" disk');
38
+ }
39
+ finally {
40
+ await rm(location, { recursive: true, force: true });
41
+ }
42
+ });
43
+ });
44
+ //# sourceMappingURL=local_file_storage.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local_file_storage.spec.js","sourceRoot":"","sources":["../../tests/local_file_storage.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lucid_attachment_collection_store.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lucid_attachment_collection_store.spec.d.ts","sourceRoot":"","sources":["../../tests/lucid_attachment_collection_store.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import { test } from '@japa/runner';
2
+ import { LucidAttachmentStore } from '../src/integrations/lucid/lucid_attachment_store.js';
3
+ import { createLucidTestDatabase } from './helpers/lucid_test_database.js';
4
+ const owner = { type: 'users', id: 'user-1', field: 'avatars' };
5
+ let database;
6
+ function makeAttachment(id) {
7
+ return {
8
+ id,
9
+ disk: 'fs',
10
+ path: `users/user-1/${id}.jpg`,
11
+ name: `${id}.jpg`,
12
+ originalName: `${id}.jpg`,
13
+ mimeType: 'image/jpeg',
14
+ extname: 'jpg',
15
+ size: 42,
16
+ };
17
+ }
18
+ test.group('Lucid attachment collection store', (group) => {
19
+ group.setup(async () => {
20
+ database = await createLucidTestDatabase();
21
+ });
22
+ group.each.setup(async () => {
23
+ await database.from('attachments').delete();
24
+ });
25
+ group.teardown(async () => {
26
+ await database.manager.closeAll();
27
+ });
28
+ test('inserts, orders, moves, and removes collection items', async ({ assert }) => {
29
+ const store = new LucidAttachmentStore();
30
+ const first = await store.createCollectionItem(owner, makeAttachment('first'));
31
+ const third = await store.createCollectionItem(owner, makeAttachment('third'));
32
+ const second = await store.createCollectionItem(owner, makeAttachment('second'), 1);
33
+ assert.deepEqual((await store.listCollection(owner)).map((item) => [item.id, item.position]), [
34
+ ['first', 0],
35
+ ['second', 1],
36
+ ['third', 2],
37
+ ]);
38
+ assert.isNull(await store.findOriginal(owner));
39
+ await store.moveCollectionItem(owner, third.id, 0);
40
+ assert.deepEqual((await store.listCollection(owner)).map((item) => [item.id, item.position]), [
41
+ ['third', 0],
42
+ ['first', 1],
43
+ ['second', 2],
44
+ ]);
45
+ await store.removeCollectionItem(owner, first);
46
+ assert.deepEqual((await store.listCollection(owner)).map((item) => [item.id, item.position]), [
47
+ ['third', 0],
48
+ ['second', 1],
49
+ ]);
50
+ });
51
+ });
52
+ //# sourceMappingURL=lucid_attachment_collection_store.spec.js.map