@warlock.js/core 4.0.48 → 4.0.59

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 (723) hide show
  1. package/esm/application.d.ts +27 -0
  2. package/esm/application.d.ts.map +1 -0
  3. package/esm/bootstrap/setup.d.ts +2 -0
  4. package/esm/bootstrap/setup.d.ts.map +1 -0
  5. package/esm/bootstrap/setup.js +14 -0
  6. package/esm/bootstrap/setup.js.map +1 -0
  7. package/esm/bootstrap.d.ts +2 -0
  8. package/esm/bootstrap.d.ts.map +1 -0
  9. package/esm/bootstrap.js +5 -0
  10. package/esm/bootstrap.js.map +1 -0
  11. package/esm/cache/database-cache-driver.d.ts +56 -0
  12. package/esm/cache/database-cache-driver.d.ts.map +1 -0
  13. package/esm/cache/database-cache-driver.js +112 -0
  14. package/esm/cache/database-cache-driver.js.map +1 -0
  15. package/esm/cache/index.d.ts +3 -0
  16. package/esm/cache/index.d.ts.map +1 -0
  17. package/esm/cache/index.js +1 -0
  18. package/esm/cache/index.js.map +1 -0
  19. package/esm/cli/cli-command.d.ts +115 -0
  20. package/esm/cli/cli-command.d.ts.map +1 -0
  21. package/esm/cli/cli-command.js +227 -0
  22. package/esm/cli/cli-command.js.map +1 -0
  23. package/esm/cli/cli-commands.manager.d.ts +71 -0
  24. package/esm/cli/cli-commands.manager.d.ts.map +1 -0
  25. package/esm/cli/cli-commands.manager.js +348 -0
  26. package/esm/cli/cli-commands.manager.js.map +1 -0
  27. package/esm/cli/cli-commands.utils.d.ts +73 -0
  28. package/esm/cli/cli-commands.utils.d.ts.map +1 -0
  29. package/esm/cli/cli-commands.utils.js +195 -0
  30. package/esm/cli/cli-commands.utils.js.map +1 -0
  31. package/esm/cli/commands/add.command.d.ts +2 -0
  32. package/esm/cli/commands/add.command.d.ts.map +1 -0
  33. package/esm/cli/commands/add.command.js +15 -0
  34. package/esm/cli/commands/add.command.js.map +1 -0
  35. package/esm/cli/commands/build.command.d.ts +2 -0
  36. package/esm/cli/commands/build.command.d.ts.map +1 -0
  37. package/esm/cli/commands/build.command.js +8 -0
  38. package/esm/cli/commands/build.command.js.map +1 -0
  39. package/esm/cli/commands/dev-server.command.d.ts +2 -0
  40. package/esm/cli/commands/dev-server.command.d.ts.map +1 -0
  41. package/esm/cli/commands/dev-server.command.js +16 -0
  42. package/esm/cli/commands/dev-server.command.js.map +1 -0
  43. package/esm/cli/commands/migrate.command.d.ts +2 -0
  44. package/esm/cli/commands/migrate.command.d.ts.map +1 -0
  45. package/esm/cli/commands/migrate.command.js +37 -0
  46. package/esm/cli/commands/migrate.command.js.map +1 -0
  47. package/esm/cli/commands/seed.command.d.ts +2 -0
  48. package/esm/cli/commands/seed.command.d.ts.map +1 -0
  49. package/esm/cli/commands/seed.command.js +17 -0
  50. package/esm/cli/commands/seed.command.js.map +1 -0
  51. package/esm/cli/commands/start-production.command.d.ts +2 -0
  52. package/esm/cli/commands/start-production.command.d.ts.map +1 -0
  53. package/esm/cli/commands/start-production.command.js +65 -0
  54. package/esm/cli/commands/start-production.command.js.map +1 -0
  55. package/esm/cli/commands/typings-generator.command.d.ts +2 -0
  56. package/esm/cli/commands/typings-generator.command.d.ts.map +1 -0
  57. package/esm/cli/commands/typings-generator.command.js +37 -0
  58. package/esm/cli/commands/typings-generator.command.js.map +1 -0
  59. package/esm/cli/commands-loader.d.ts +18 -0
  60. package/esm/cli/commands-loader.d.ts.map +1 -0
  61. package/esm/cli/commands-loader.js +45 -0
  62. package/esm/cli/commands-loader.js.map +1 -0
  63. package/esm/cli/framework-cli-commands.d.ts +2 -0
  64. package/esm/cli/framework-cli-commands.d.ts.map +1 -0
  65. package/esm/cli/framework-cli-commands.js +11 -0
  66. package/esm/cli/framework-cli-commands.js.map +1 -0
  67. package/esm/cli/index.d.ts +3 -0
  68. package/esm/cli/index.d.ts.map +1 -0
  69. package/esm/cli/index.js +1 -4
  70. package/esm/cli/index.js.map +1 -1
  71. package/esm/cli/parse-cli-args.d.ts +18 -0
  72. package/esm/cli/parse-cli-args.d.ts.map +1 -0
  73. package/esm/cli/parse-cli-args.js +82 -0
  74. package/esm/cli/parse-cli-args.js.map +1 -0
  75. package/esm/cli/start.d.ts +2 -0
  76. package/esm/cli/start.d.ts.map +1 -0
  77. package/esm/cli/start.js +2 -6
  78. package/esm/cli/start.js.map +1 -1
  79. package/esm/cli/string-similarity.d.ts +44 -0
  80. package/esm/cli/string-similarity.d.ts.map +1 -0
  81. package/esm/cli/string-similarity.js +57 -0
  82. package/esm/cli/string-similarity.js.map +1 -0
  83. package/esm/cli/types.d.ts +206 -0
  84. package/esm/cli/types.d.ts.map +1 -0
  85. package/esm/config/config-getter.d.ts +35 -0
  86. package/esm/config/config-getter.d.ts.map +1 -0
  87. package/esm/config/config-getter.js +21 -0
  88. package/esm/config/config-getter.js.map +1 -0
  89. package/esm/config/config-handlers.d.ts +19 -0
  90. package/esm/config/config-handlers.d.ts.map +1 -0
  91. package/esm/config/config-handlers.js +47 -0
  92. package/esm/config/config-handlers.js.map +1 -0
  93. package/esm/config/config-loader.d.ts +37 -0
  94. package/esm/config/config-loader.d.ts.map +1 -0
  95. package/esm/config/config-loader.js +85 -0
  96. package/esm/config/config-loader.js.map +1 -0
  97. package/esm/config/config-manager.d.ts +22 -0
  98. package/esm/config/config-manager.d.ts.map +1 -0
  99. package/esm/config/config-manager.js +25 -0
  100. package/esm/config/config-manager.js.map +1 -0
  101. package/esm/config/config-special-handlers.d.ts +17 -0
  102. package/esm/config/config-special-handlers.d.ts.map +1 -0
  103. package/esm/config/config-special-handlers.js +23 -0
  104. package/esm/config/config-special-handlers.js.map +1 -0
  105. package/esm/config/index.d.ts +5 -0
  106. package/esm/config/index.d.ts.map +1 -0
  107. package/esm/config/load-config-files.d.ts +6 -0
  108. package/esm/config/load-config-files.d.ts.map +1 -0
  109. package/esm/config/load-config-files.js +19 -0
  110. package/esm/config/load-config-files.js.map +1 -0
  111. package/esm/config/types.d.ts +52 -0
  112. package/esm/config/types.d.ts.map +1 -0
  113. package/esm/database/index.d.ts +4 -0
  114. package/esm/database/index.d.ts.map +1 -0
  115. package/esm/database/migrate-action.d.ts +8 -0
  116. package/esm/database/migrate-action.d.ts.map +1 -0
  117. package/esm/database/migrate-action.js +95 -0
  118. package/esm/database/migrate-action.js.map +1 -0
  119. package/esm/database/models/database-log/database-log.d.ts +16 -0
  120. package/esm/database/models/database-log/database-log.d.ts.map +1 -0
  121. package/esm/database/models/database-log/database-log.js +17 -0
  122. package/esm/database/models/database-log/database-log.js.map +1 -0
  123. package/esm/database/models/database-log/index.d.ts +2 -0
  124. package/esm/database/models/database-log/index.d.ts.map +1 -0
  125. package/esm/database/seed-command-action.d.ts +3 -0
  126. package/esm/database/seed-command-action.d.ts.map +1 -0
  127. package/esm/database/seed-command-action.js +36 -0
  128. package/esm/database/seed-command-action.js.map +1 -0
  129. package/esm/database/seeds/index.d.ts +3 -0
  130. package/esm/database/seeds/index.d.ts.map +1 -0
  131. package/esm/database/seeds/seeder.d.ts +36 -0
  132. package/esm/database/seeds/seeder.d.ts.map +1 -0
  133. package/esm/database/seeds/seeder.js +6 -0
  134. package/esm/database/seeds/seeder.js.map +1 -0
  135. package/esm/database/seeds/seeders.manager.d.ts +47 -0
  136. package/esm/database/seeds/seeders.manager.d.ts.map +1 -0
  137. package/esm/database/seeds/seeders.manager.js +137 -0
  138. package/esm/database/seeds/seeders.manager.js.map +1 -0
  139. package/esm/database/seeds/seeds-table-migration.d.ts +8 -0
  140. package/esm/database/seeds/seeds-table-migration.d.ts.map +1 -0
  141. package/esm/database/seeds/seeds-table-migration.js +18 -0
  142. package/esm/database/seeds/seeds-table-migration.js.map +1 -0
  143. package/esm/database/seeds/types.d.ts +13 -0
  144. package/esm/database/seeds/types.d.ts.map +1 -0
  145. package/esm/database/seeds/utils.d.ts +2 -0
  146. package/esm/database/seeds/utils.d.ts.map +1 -0
  147. package/esm/database/seeds/utils.js +1 -0
  148. package/esm/database/seeds/utils.js.map +1 -0
  149. package/esm/database/utils.d.ts +18 -0
  150. package/esm/database/utils.d.ts.map +1 -0
  151. package/esm/database/utils.js +30 -0
  152. package/esm/database/utils.js.map +1 -0
  153. package/esm/dev2-server/connectors/base-connector.d.ts +49 -0
  154. package/esm/dev2-server/connectors/base-connector.d.ts.map +1 -0
  155. package/esm/dev2-server/connectors/base-connector.js +48 -0
  156. package/esm/dev2-server/connectors/base-connector.js.map +1 -0
  157. package/esm/dev2-server/connectors/cache-connector.d.ts +23 -0
  158. package/esm/dev2-server/connectors/cache-connector.d.ts.map +1 -0
  159. package/esm/dev2-server/connectors/cache-connector.js +35 -0
  160. package/esm/dev2-server/connectors/cache-connector.js.map +1 -0
  161. package/esm/dev2-server/connectors/connectors-manager.d.ts +38 -0
  162. package/esm/dev2-server/connectors/connectors-manager.d.ts.map +1 -0
  163. package/esm/dev2-server/connectors/connectors-manager.js +81 -0
  164. package/esm/dev2-server/connectors/connectors-manager.js.map +1 -0
  165. package/esm/dev2-server/connectors/database-connector.d.ts +23 -0
  166. package/esm/dev2-server/connectors/database-connector.d.ts.map +1 -0
  167. package/esm/dev2-server/connectors/database-connector.js +51 -0
  168. package/esm/dev2-server/connectors/database-connector.js.map +1 -0
  169. package/esm/dev2-server/connectors/http-connector.d.ts +29 -0
  170. package/esm/dev2-server/connectors/http-connector.d.ts.map +1 -0
  171. package/esm/dev2-server/connectors/http-connector.js +69 -0
  172. package/esm/dev2-server/connectors/http-connector.js.map +1 -0
  173. package/esm/dev2-server/connectors/index.d.ts +12 -0
  174. package/esm/dev2-server/connectors/index.d.ts.map +1 -0
  175. package/esm/dev2-server/connectors/storage.connector.d.ts +23 -0
  176. package/esm/dev2-server/connectors/storage.connector.d.ts.map +1 -0
  177. package/esm/dev2-server/connectors/storage.connector.js +29 -0
  178. package/esm/dev2-server/connectors/storage.connector.js.map +1 -0
  179. package/esm/dev2-server/connectors/types.d.ts +51 -0
  180. package/esm/dev2-server/connectors/types.d.ts.map +1 -0
  181. package/esm/dev2-server/connectors/types.js +10 -0
  182. package/esm/dev2-server/connectors/types.js.map +1 -0
  183. package/esm/dev2-server/create-worker.d.ts +34 -0
  184. package/esm/dev2-server/create-worker.d.ts.map +1 -0
  185. package/esm/dev2-server/create-worker.js +37 -0
  186. package/esm/dev2-server/create-worker.js.map +1 -0
  187. package/esm/dev2-server/dependency-graph.d.ts +93 -0
  188. package/esm/dev2-server/dependency-graph.d.ts.map +1 -0
  189. package/esm/dev2-server/dependency-graph.js +266 -0
  190. package/esm/dev2-server/dependency-graph.js.map +1 -0
  191. package/esm/dev2-server/dev-logger.d.ts +14 -0
  192. package/esm/dev2-server/dev-logger.d.ts.map +1 -0
  193. package/esm/dev2-server/dev-logger.js +130 -0
  194. package/esm/dev2-server/dev-logger.js.map +1 -0
  195. package/esm/dev2-server/development-server.d.ts +47 -0
  196. package/esm/dev2-server/development-server.d.ts.map +1 -0
  197. package/esm/dev2-server/development-server.js +149 -0
  198. package/esm/dev2-server/development-server.js.map +1 -0
  199. package/esm/dev2-server/events.d.ts +5 -0
  200. package/esm/dev2-server/events.d.ts.map +1 -0
  201. package/esm/dev2-server/events.js +4 -0
  202. package/esm/dev2-server/events.js.map +1 -0
  203. package/esm/dev2-server/export-analyzer.d.ts +84 -0
  204. package/esm/dev2-server/export-analyzer.d.ts.map +1 -0
  205. package/esm/dev2-server/export-analyzer.js +206 -0
  206. package/esm/dev2-server/export-analyzer.js.map +1 -0
  207. package/esm/dev2-server/file-event-handler.d.ts +156 -0
  208. package/esm/dev2-server/file-event-handler.d.ts.map +1 -0
  209. package/esm/dev2-server/file-event-handler.js +300 -0
  210. package/esm/dev2-server/file-event-handler.js.map +1 -0
  211. package/esm/dev2-server/file-manager.d.ts +385 -0
  212. package/esm/dev2-server/file-manager.d.ts.map +1 -0
  213. package/esm/dev2-server/file-manager.js +580 -0
  214. package/esm/dev2-server/file-manager.js.map +1 -0
  215. package/esm/dev2-server/file-operations.d.ts +203 -0
  216. package/esm/dev2-server/file-operations.d.ts.map +1 -0
  217. package/esm/dev2-server/file-operations.js +365 -0
  218. package/esm/dev2-server/file-operations.js.map +1 -0
  219. package/esm/dev2-server/files-orchestrator.d.ts +146 -0
  220. package/esm/dev2-server/files-orchestrator.d.ts.map +1 -0
  221. package/esm/dev2-server/files-orchestrator.js +314 -0
  222. package/esm/dev2-server/files-orchestrator.js.map +1 -0
  223. package/esm/dev2-server/files-watcher.d.ts +67 -0
  224. package/esm/dev2-server/files-watcher.d.ts.map +1 -0
  225. package/esm/dev2-server/files-watcher.js +95 -0
  226. package/esm/dev2-server/files-watcher.js.map +1 -0
  227. package/esm/dev2-server/flags.d.ts +10 -0
  228. package/esm/dev2-server/flags.d.ts.map +1 -0
  229. package/esm/dev2-server/flags.js +9 -0
  230. package/esm/dev2-server/flags.js.map +1 -0
  231. package/esm/dev2-server/health-checker/checkers/base-health-checker.d.ts +52 -0
  232. package/esm/dev2-server/health-checker/checkers/base-health-checker.d.ts.map +1 -0
  233. package/esm/dev2-server/health-checker/checkers/base-health-checker.js +71 -0
  234. package/esm/dev2-server/health-checker/checkers/base-health-checker.js.map +1 -0
  235. package/esm/dev2-server/health-checker/checkers/eslint-health-checker.d.ts +40 -0
  236. package/esm/dev2-server/health-checker/checkers/eslint-health-checker.d.ts.map +1 -0
  237. package/esm/dev2-server/health-checker/checkers/eslint-health-checker.js +217 -0
  238. package/esm/dev2-server/health-checker/checkers/eslint-health-checker.js.map +1 -0
  239. package/esm/dev2-server/health-checker/checkers/typescript-health-checker.d.ts +56 -0
  240. package/esm/dev2-server/health-checker/checkers/typescript-health-checker.d.ts.map +1 -0
  241. package/esm/dev2-server/health-checker/checkers/typescript-health-checker.js +279 -0
  242. package/esm/dev2-server/health-checker/checkers/typescript-health-checker.js.map +1 -0
  243. package/esm/dev2-server/health-checker/file-health-checker.contract.d.ts +59 -0
  244. package/esm/dev2-server/health-checker/file-health-checker.contract.d.ts.map +1 -0
  245. package/esm/dev2-server/health-checker/file-health-result.d.ts +68 -0
  246. package/esm/dev2-server/health-checker/file-health-result.d.ts.map +1 -0
  247. package/esm/dev2-server/health-checker/file-health-result.js +40 -0
  248. package/esm/dev2-server/health-checker/file-health-result.js.map +1 -0
  249. package/esm/dev2-server/health-checker/files-healthcare.manager.d.ts +115 -0
  250. package/esm/dev2-server/health-checker/files-healthcare.manager.d.ts.map +1 -0
  251. package/esm/dev2-server/health-checker/files-healthcare.manager.js +422 -0
  252. package/esm/dev2-server/health-checker/files-healthcare.manager.js.map +1 -0
  253. package/esm/dev2-server/health-checker/index.d.ts +6 -0
  254. package/esm/dev2-server/health-checker/index.d.ts.map +1 -0
  255. package/esm/dev2-server/health-checker/workers/eslint-health.worker.d.ts +2 -0
  256. package/esm/dev2-server/health-checker/workers/eslint-health.worker.d.ts.map +1 -0
  257. package/esm/dev2-server/health-checker/workers/eslint-health.worker.js +214 -0
  258. package/esm/dev2-server/health-checker/workers/eslint-health.worker.js.map +1 -0
  259. package/esm/dev2-server/health-checker/workers/ts-health.worker.d.ts +2 -0
  260. package/esm/dev2-server/health-checker/workers/ts-health.worker.d.ts.map +1 -0
  261. package/esm/dev2-server/health-checker/workers/ts-health.worker.js +261 -0
  262. package/esm/dev2-server/health-checker/workers/ts-health.worker.js.map +1 -0
  263. package/esm/dev2-server/import-transformer.d.ts +17 -0
  264. package/esm/dev2-server/import-transformer.d.ts.map +1 -0
  265. package/esm/dev2-server/import-transformer.js +280 -0
  266. package/esm/dev2-server/import-transformer.js.map +1 -0
  267. package/esm/dev2-server/index.d.ts +1 -0
  268. package/esm/dev2-server/index.d.ts.map +1 -0
  269. package/esm/dev2-server/layer-executor.d.ts +61 -0
  270. package/esm/dev2-server/layer-executor.d.ts.map +1 -0
  271. package/esm/dev2-server/layer-executor.js +314 -0
  272. package/esm/dev2-server/layer-executor.js.map +1 -0
  273. package/esm/dev2-server/manifest-manager.d.ts +80 -0
  274. package/esm/dev2-server/manifest-manager.d.ts.map +1 -0
  275. package/esm/dev2-server/manifest-manager.js +107 -0
  276. package/esm/dev2-server/manifest-manager.js.map +1 -0
  277. package/esm/dev2-server/module-loader.d.ts +108 -0
  278. package/esm/dev2-server/module-loader.d.ts.map +1 -0
  279. package/esm/dev2-server/module-loader.js +266 -0
  280. package/esm/dev2-server/module-loader.js.map +1 -0
  281. package/esm/dev2-server/package-json-manager.d.ts +16 -0
  282. package/esm/dev2-server/package-json-manager.d.ts.map +1 -0
  283. package/esm/dev2-server/package-json-manager.js +20 -0
  284. package/esm/dev2-server/package-json-manager.js.map +1 -0
  285. package/esm/dev2-server/parse-imports.d.ts +13 -0
  286. package/esm/dev2-server/parse-imports.d.ts.map +1 -0
  287. package/esm/dev2-server/parse-imports.js +329 -0
  288. package/esm/dev2-server/parse-imports.js.map +1 -0
  289. package/esm/dev2-server/path.d.ts +39 -0
  290. package/esm/dev2-server/path.d.ts.map +1 -0
  291. package/esm/dev2-server/path.js +56 -0
  292. package/esm/dev2-server/path.js.map +1 -0
  293. package/esm/dev2-server/runtime-import-helper.d.ts +8 -0
  294. package/esm/dev2-server/runtime-import-helper.d.ts.map +1 -0
  295. package/esm/dev2-server/runtime-import-helper.js +157 -0
  296. package/esm/dev2-server/runtime-import-helper.js.map +1 -0
  297. package/esm/dev2-server/special-files-collector.d.ts +114 -0
  298. package/esm/dev2-server/special-files-collector.d.ts.map +1 -0
  299. package/esm/dev2-server/special-files-collector.js +212 -0
  300. package/esm/dev2-server/special-files-collector.js.map +1 -0
  301. package/esm/dev2-server/start-development-server.d.ts +7 -0
  302. package/esm/dev2-server/start-development-server.d.ts.map +1 -0
  303. package/esm/dev2-server/start-development-server.js +21 -0
  304. package/esm/dev2-server/start-development-server.js.map +1 -0
  305. package/esm/dev2-server/transpile-file.d.ts +11 -0
  306. package/esm/dev2-server/transpile-file.d.ts.map +1 -0
  307. package/esm/dev2-server/transpile-file.js +21 -0
  308. package/esm/dev2-server/transpile-file.js.map +1 -0
  309. package/esm/dev2-server/tsconfig-manager.d.ts +45 -0
  310. package/esm/dev2-server/tsconfig-manager.d.ts.map +1 -0
  311. package/esm/dev2-server/tsconfig-manager.js +107 -0
  312. package/esm/dev2-server/tsconfig-manager.js.map +1 -0
  313. package/esm/dev2-server/type-generator.d.ts +115 -0
  314. package/esm/dev2-server/type-generator.d.ts.map +1 -0
  315. package/esm/dev2-server/type-generator.js +566 -0
  316. package/esm/dev2-server/type-generator.js.map +1 -0
  317. package/esm/dev2-server/types.d.ts +30 -0
  318. package/esm/dev2-server/types.d.ts.map +1 -0
  319. package/esm/dev2-server/utils.d.ts +15 -0
  320. package/esm/dev2-server/utils.d.ts.map +1 -0
  321. package/esm/dev2-server/utils.js +40 -0
  322. package/esm/dev2-server/utils.js.map +1 -0
  323. package/esm/generations/add-command.action.d.ts +3 -0
  324. package/esm/generations/add-command.action.d.ts.map +1 -0
  325. package/esm/generations/add-command.action.js +154 -0
  326. package/esm/generations/add-command.action.js.map +1 -0
  327. package/esm/http/config.d.ts +10 -0
  328. package/esm/http/config.d.ts.map +1 -0
  329. package/esm/http/config.js +22 -0
  330. package/esm/http/config.js.map +1 -0
  331. package/esm/http/context/request-context.d.ts +47 -0
  332. package/esm/http/context/request-context.d.ts.map +1 -0
  333. package/esm/http/context/request-context.js +52 -0
  334. package/esm/http/context/request-context.js.map +1 -0
  335. package/esm/http/createHttpApplication.d.ts +3 -0
  336. package/esm/http/createHttpApplication.d.ts.map +1 -0
  337. package/esm/http/createHttpApplication.js +28 -0
  338. package/esm/http/createHttpApplication.js.map +1 -0
  339. package/esm/http/database/RequestLog.d.ts +16 -0
  340. package/esm/http/database/RequestLog.d.ts.map +1 -0
  341. package/esm/http/database/RequestLog.js +26 -0
  342. package/esm/http/database/RequestLog.js.map +1 -0
  343. package/esm/http/errors/index.d.ts +2 -0
  344. package/esm/http/errors/index.d.ts.map +1 -0
  345. package/esm/http/errors/resource-not-found.error.d.ts +21 -0
  346. package/esm/http/errors/resource-not-found.error.d.ts.map +1 -0
  347. package/esm/http/errors/resource-not-found.error.js +40 -0
  348. package/esm/http/errors/resource-not-found.error.js.map +1 -0
  349. package/esm/http/events.d.ts +4 -0
  350. package/esm/http/events.d.ts.map +1 -0
  351. package/esm/http/events.js +26 -0
  352. package/esm/http/events.js.map +1 -0
  353. package/esm/http/index.d.ts +17 -0
  354. package/esm/http/index.d.ts.map +1 -0
  355. package/esm/http/middleware/cache-response-middleware.d.ts +34 -0
  356. package/esm/http/middleware/cache-response-middleware.d.ts.map +1 -0
  357. package/esm/http/middleware/cache-response-middleware.js +45 -0
  358. package/esm/http/middleware/cache-response-middleware.js.map +1 -0
  359. package/esm/http/middleware/index.d.ts +3 -0
  360. package/esm/http/middleware/index.d.ts.map +1 -0
  361. package/esm/http/middleware/inject-request-context.d.ts +21 -0
  362. package/esm/http/middleware/inject-request-context.d.ts.map +1 -0
  363. package/esm/http/middleware/inject-request-context.js +105 -0
  364. package/esm/http/middleware/inject-request-context.js.map +1 -0
  365. package/esm/http/plugins/index.d.ts +3 -0
  366. package/esm/http/plugins/index.d.ts.map +1 -0
  367. package/esm/http/plugins.d.ts +3 -0
  368. package/esm/http/plugins.d.ts.map +1 -0
  369. package/esm/http/plugins.js +31 -0
  370. package/esm/http/plugins.js.map +1 -0
  371. package/esm/http/request-controller.d.ts +11 -0
  372. package/esm/http/request-controller.d.ts.map +1 -0
  373. package/esm/http/request-controller.js +9 -0
  374. package/esm/http/request-controller.js.map +1 -0
  375. package/esm/http/request.d.ts +380 -0
  376. package/esm/http/request.d.ts.map +1 -0
  377. package/esm/http/request.js +733 -0
  378. package/esm/http/request.js.map +1 -0
  379. package/esm/http/response.js +914 -0
  380. package/esm/http/response.js.map +1 -0
  381. package/esm/http/server.d.ts +8 -0
  382. package/esm/http/server.d.ts.map +1 -0
  383. package/esm/http/server.js +15 -0
  384. package/esm/http/server.js.map +1 -0
  385. package/esm/http/types.d.ts +174 -0
  386. package/esm/http/types.d.ts.map +1 -0
  387. package/esm/http/uploaded-file.d.ts +459 -0
  388. package/esm/http/uploaded-file.d.ts.map +1 -0
  389. package/esm/http/uploaded-file.js +709 -0
  390. package/esm/http/uploaded-file.js.map +1 -0
  391. package/esm/http/uploads-config.d.ts +26 -0
  392. package/esm/http/uploads-config.d.ts.map +1 -0
  393. package/esm/http/uploads-config.js +35 -0
  394. package/esm/http/uploads-config.js.map +1 -0
  395. package/esm/http/uploads-types.d.ts +236 -0
  396. package/esm/http/uploads-types.d.ts.map +1 -0
  397. package/esm/image/image.d.ts +388 -0
  398. package/esm/image/image.d.ts.map +1 -0
  399. package/esm/image/image.js +602 -0
  400. package/esm/image/image.js.map +1 -0
  401. package/esm/image/index.d.ts +2 -0
  402. package/esm/image/index.d.ts.map +1 -0
  403. package/esm/index.d.ts +28 -0
  404. package/esm/index.d.ts.map +1 -0
  405. package/esm/index.js +1 -28
  406. package/esm/index.js.map +1 -1
  407. package/esm/logger/index.d.ts +3 -0
  408. package/esm/logger/index.d.ts.map +1 -0
  409. package/esm/logger/logger.d.ts +3 -0
  410. package/esm/logger/logger.d.ts.map +1 -0
  411. package/esm/logger/logger.js +16 -0
  412. package/esm/logger/logger.js.map +1 -0
  413. package/esm/logger/types.d.ts +39 -0
  414. package/esm/logger/types.d.ts.map +1 -0
  415. package/esm/mail/config.d.ts +83 -0
  416. package/esm/mail/config.d.ts.map +1 -0
  417. package/esm/mail/config.js +152 -0
  418. package/esm/mail/config.js.map +1 -0
  419. package/esm/mail/events.d.ts +96 -0
  420. package/esm/mail/events.d.ts.map +1 -0
  421. package/esm/mail/events.js +123 -0
  422. package/esm/mail/events.js.map +1 -0
  423. package/esm/mail/index.d.ts +10 -0
  424. package/esm/mail/index.d.ts.map +1 -0
  425. package/esm/mail/mail.d.ts +175 -0
  426. package/esm/mail/mail.d.ts.map +1 -0
  427. package/esm/mail/mail.js +286 -0
  428. package/esm/mail/mail.js.map +1 -0
  429. package/esm/mail/mailer-pool.d.ts +27 -0
  430. package/esm/mail/mailer-pool.d.ts.map +1 -0
  431. package/esm/mail/mailer-pool.js +143 -0
  432. package/esm/mail/mailer-pool.js.map +1 -0
  433. package/esm/mail/react-mail.d.ts +9 -0
  434. package/esm/mail/react-mail.d.ts.map +1 -0
  435. package/esm/mail/react-mail.js +28 -0
  436. package/esm/mail/react-mail.js.map +1 -0
  437. package/esm/mail/send-mail.d.ts +33 -0
  438. package/esm/mail/send-mail.d.ts.map +1 -0
  439. package/esm/mail/send-mail.js +309 -0
  440. package/esm/mail/send-mail.js.map +1 -0
  441. package/esm/mail/test-mailbox.d.ts +110 -0
  442. package/esm/mail/test-mailbox.d.ts.map +1 -0
  443. package/esm/mail/test-mailbox.js +143 -0
  444. package/esm/mail/test-mailbox.js.map +1 -0
  445. package/esm/mail/types.d.ts +245 -0
  446. package/esm/mail/types.d.ts.map +1 -0
  447. package/esm/mail/types.js +13 -0
  448. package/esm/mail/types.js.map +1 -0
  449. package/esm/manifest/manifest-manager.d.ts +74 -0
  450. package/esm/manifest/manifest-manager.d.ts.map +1 -0
  451. package/esm/manifest/manifest-manager.js +88 -0
  452. package/esm/manifest/manifest-manager.js.map +1 -0
  453. package/esm/production/build-app-production.d.ts +6 -0
  454. package/esm/production/build-app-production.d.ts.map +1 -0
  455. package/esm/production/build-app-production.js +8 -0
  456. package/esm/production/build-app-production.js.map +1 -0
  457. package/esm/production/esbuild-plugins.d.ts +5 -0
  458. package/esm/production/esbuild-plugins.d.ts.map +1 -0
  459. package/esm/production/esbuild-plugins.js +23 -0
  460. package/esm/production/esbuild-plugins.js.map +1 -0
  461. package/esm/production/production-builder.d.ts +76 -0
  462. package/esm/production/production-builder.d.ts.map +1 -0
  463. package/esm/production/production-builder.js +247 -0
  464. package/esm/production/production-builder.js.map +1 -0
  465. package/esm/react/index.d.ts +14 -0
  466. package/esm/react/index.d.ts.map +1 -0
  467. package/esm/react/index.js +65 -0
  468. package/esm/react/index.js.map +1 -0
  469. package/esm/repositories/adapters/cascade/cascade-adapter.d.ts +85 -0
  470. package/esm/repositories/adapters/cascade/cascade-adapter.d.ts.map +1 -0
  471. package/esm/repositories/adapters/cascade/cascade-adapter.js +179 -0
  472. package/esm/repositories/adapters/cascade/cascade-adapter.js.map +1 -0
  473. package/esm/repositories/adapters/cascade/cascade-query-builder.d.ts +124 -0
  474. package/esm/repositories/adapters/cascade/cascade-query-builder.d.ts.map +1 -0
  475. package/esm/repositories/adapters/cascade/cascade-query-builder.js +267 -0
  476. package/esm/repositories/adapters/cascade/cascade-query-builder.js.map +1 -0
  477. package/esm/repositories/adapters/cascade/filter-applicator.d.ts +62 -0
  478. package/esm/repositories/adapters/cascade/filter-applicator.d.ts.map +1 -0
  479. package/esm/repositories/adapters/cascade/filter-applicator.js +423 -0
  480. package/esm/repositories/adapters/cascade/filter-applicator.js.map +1 -0
  481. package/esm/repositories/adapters/cascade/index.d.ts +7 -0
  482. package/esm/repositories/adapters/cascade/index.d.ts.map +1 -0
  483. package/esm/repositories/contracts/index.d.ts +8 -0
  484. package/esm/repositories/contracts/index.d.ts.map +1 -0
  485. package/esm/repositories/contracts/query-builder.contract.d.ts +279 -0
  486. package/esm/repositories/contracts/query-builder.contract.d.ts.map +1 -0
  487. package/esm/repositories/contracts/repository-adapter.contract.d.ts +183 -0
  488. package/esm/repositories/contracts/repository-adapter.contract.d.ts.map +1 -0
  489. package/esm/repositories/contracts/types.d.ts +278 -0
  490. package/esm/repositories/contracts/types.d.ts.map +1 -0
  491. package/esm/repositories/index.d.ts +8 -0
  492. package/esm/repositories/index.d.ts.map +1 -0
  493. package/esm/repositories/repository.manager.d.ts +619 -0
  494. package/esm/repositories/repository.manager.d.ts.map +1 -0
  495. package/esm/repositories/repository.manager.js +978 -0
  496. package/esm/repositories/repository.manager.js.map +1 -0
  497. package/esm/resource/define-resource.js +58 -0
  498. package/esm/resource/define-resource.js.map +1 -0
  499. package/esm/resource/index.d.ts +5 -0
  500. package/esm/resource/index.d.ts.map +1 -0
  501. package/esm/resource/resource-field-builder.d.ts +83 -0
  502. package/esm/resource/resource-field-builder.d.ts.map +1 -0
  503. package/esm/resource/resource-field-builder.js +189 -0
  504. package/esm/resource/resource-field-builder.js.map +1 -0
  505. package/esm/resource/resource.d.ts +105 -0
  506. package/esm/resource/resource.d.ts.map +1 -0
  507. package/esm/resource/resource.js +231 -0
  508. package/esm/resource/resource.js.map +1 -0
  509. package/esm/resource/types.d.ts +40 -0
  510. package/esm/resource/types.d.ts.map +1 -0
  511. package/esm/restful/index.d.ts +2 -0
  512. package/esm/restful/index.d.ts.map +1 -0
  513. package/esm/restful/restful.d.ts +110 -0
  514. package/esm/restful/restful.d.ts.map +1 -0
  515. package/esm/restful/restful.js +317 -0
  516. package/esm/restful/restful.js.map +1 -0
  517. package/esm/router/index.d.ts +4 -0
  518. package/esm/router/index.d.ts.map +1 -0
  519. package/esm/router/route-registry.d.ts +30 -0
  520. package/esm/router/route-registry.d.ts.map +1 -0
  521. package/esm/router/route-registry.js +67 -0
  522. package/esm/router/route-registry.js.map +1 -0
  523. package/esm/router/route.d.ts +34 -0
  524. package/esm/router/route.d.ts.map +1 -0
  525. package/esm/router/router.d.ts +169 -0
  526. package/esm/router/router.d.ts.map +1 -0
  527. package/esm/router/router.js +578 -0
  528. package/esm/router/router.js.map +1 -0
  529. package/esm/router/types.d.ts +267 -0
  530. package/esm/router/types.d.ts.map +1 -0
  531. package/esm/router/utils.d.ts +5 -0
  532. package/esm/router/utils.d.ts.map +1 -0
  533. package/esm/router/utils.js +6 -0
  534. package/esm/router/utils.js.map +1 -0
  535. package/esm/storage/config.d.ts +15 -0
  536. package/esm/storage/config.d.ts.map +1 -0
  537. package/esm/storage/config.js +32 -0
  538. package/esm/storage/config.js.map +1 -0
  539. package/esm/storage/context/storage-driver-context.d.ts +69 -0
  540. package/esm/storage/context/storage-driver-context.d.ts.map +1 -0
  541. package/esm/storage/context/storage-driver-context.js +80 -0
  542. package/esm/storage/context/storage-driver-context.js.map +1 -0
  543. package/esm/storage/drivers/cloud-driver.d.ts +196 -0
  544. package/esm/storage/drivers/cloud-driver.d.ts.map +1 -0
  545. package/esm/storage/drivers/cloud-driver.js +697 -0
  546. package/esm/storage/drivers/cloud-driver.js.map +1 -0
  547. package/esm/storage/drivers/do-spaces-driver.d.ts +43 -0
  548. package/esm/storage/drivers/do-spaces-driver.d.ts.map +1 -0
  549. package/esm/storage/drivers/do-spaces-driver.js +50 -0
  550. package/esm/storage/drivers/do-spaces-driver.js.map +1 -0
  551. package/esm/storage/drivers/local-driver.d.ts +151 -0
  552. package/esm/storage/drivers/local-driver.d.ts.map +1 -0
  553. package/esm/storage/drivers/local-driver.js +448 -0
  554. package/esm/storage/drivers/local-driver.js.map +1 -0
  555. package/esm/storage/drivers/r2-driver.d.ts +47 -0
  556. package/esm/storage/drivers/r2-driver.d.ts.map +1 -0
  557. package/esm/storage/drivers/r2-driver.js +60 -0
  558. package/esm/storage/drivers/r2-driver.js.map +1 -0
  559. package/esm/storage/drivers/s3-driver.d.ts +32 -0
  560. package/esm/storage/drivers/s3-driver.d.ts.map +1 -0
  561. package/esm/storage/drivers/s3-driver.js +37 -0
  562. package/esm/storage/drivers/s3-driver.js.map +1 -0
  563. package/esm/storage/index.d.ts +13 -0
  564. package/esm/storage/index.d.ts.map +1 -0
  565. package/esm/storage/scoped-storage.d.ts +514 -0
  566. package/esm/storage/scoped-storage.d.ts.map +1 -0
  567. package/esm/storage/scoped-storage.js +656 -0
  568. package/esm/storage/scoped-storage.js.map +1 -0
  569. package/esm/storage/storage-file.d.ts +216 -0
  570. package/esm/storage/storage-file.d.ts.map +1 -0
  571. package/esm/storage/storage-file.js +358 -0
  572. package/esm/storage/storage-file.js.map +1 -0
  573. package/esm/storage/storage.d.ts +583 -0
  574. package/esm/storage/storage.d.ts.map +1 -0
  575. package/esm/storage/storage.js +945 -0
  576. package/esm/storage/storage.js.map +1 -0
  577. package/esm/storage/types.d.ts +909 -0
  578. package/esm/storage/types.d.ts.map +1 -0
  579. package/esm/storage/utils/mime.d.ts +33 -0
  580. package/esm/storage/utils/mime.d.ts.map +1 -0
  581. package/esm/storage/utils/mime.js +45 -0
  582. package/esm/storage/utils/mime.js.map +1 -0
  583. package/esm/store/index.d.ts +25 -0
  584. package/esm/store/index.d.ts.map +1 -0
  585. package/esm/store/index.js +52 -0
  586. package/esm/store/index.js.map +1 -0
  587. package/esm/utils/app-log.d.ts +8 -0
  588. package/esm/utils/app-log.d.ts.map +1 -0
  589. package/esm/utils/app-log.js +7 -0
  590. package/esm/utils/app-log.js.map +1 -0
  591. package/esm/utils/cleanup-temp-files.d.ts +5 -0
  592. package/esm/utils/cleanup-temp-files.d.ts.map +1 -0
  593. package/esm/utils/database-log.d.ts +25 -0
  594. package/esm/utils/database-log.d.ts.map +1 -0
  595. package/esm/utils/database-log.js +43 -0
  596. package/esm/utils/database-log.js.map +1 -0
  597. package/esm/utils/download-file.d.ts +3 -0
  598. package/esm/utils/download-file.d.ts.map +1 -0
  599. package/esm/utils/environment.d.ts +4 -0
  600. package/esm/utils/environment.d.ts.map +1 -0
  601. package/esm/utils/environment.js +6 -0
  602. package/esm/utils/environment.js.map +1 -0
  603. package/esm/utils/get-localized.d.ts +10 -0
  604. package/esm/utils/get-localized.d.ts.map +1 -0
  605. package/esm/utils/get-localized.js +15 -0
  606. package/esm/utils/get-localized.js.map +1 -0
  607. package/esm/utils/index.d.ts +12 -0
  608. package/esm/utils/index.d.ts.map +1 -0
  609. package/esm/utils/internal.d.ts +4 -0
  610. package/esm/utils/internal.d.ts.map +1 -0
  611. package/esm/utils/paths.d.ts +55 -0
  612. package/esm/utils/paths.d.ts.map +1 -0
  613. package/esm/utils/paths.js +89 -0
  614. package/esm/utils/paths.js.map +1 -0
  615. package/esm/utils/promise-all-object.d.ts +8 -0
  616. package/esm/utils/promise-all-object.d.ts.map +1 -0
  617. package/esm/utils/promise-all-object.js +12 -0
  618. package/esm/utils/promise-all-object.js.map +1 -0
  619. package/esm/utils/queue.d.ts +49 -0
  620. package/esm/utils/queue.d.ts.map +1 -0
  621. package/esm/utils/queue.js +89 -0
  622. package/esm/utils/queue.js.map +1 -0
  623. package/esm/utils/sleep.d.ts +2 -0
  624. package/esm/utils/sleep.d.ts.map +1 -0
  625. package/esm/utils/sleep.js +3 -0
  626. package/esm/utils/sleep.js.map +1 -0
  627. package/esm/utils/sluggable.d.ts +5 -0
  628. package/esm/utils/sluggable.d.ts.map +1 -0
  629. package/esm/utils/sluggable.js +15 -0
  630. package/esm/utils/sluggable.js.map +1 -0
  631. package/esm/utils/to-json.d.ts +2 -0
  632. package/esm/utils/to-json.d.ts.map +1 -0
  633. package/esm/utils/to-json.js +26 -0
  634. package/esm/utils/to-json.js.map +1 -0
  635. package/esm/utils/types.d.ts +22 -0
  636. package/esm/utils/types.d.ts.map +1 -0
  637. package/esm/utils/urls.d.ts +21 -0
  638. package/esm/utils/urls.d.ts.map +1 -0
  639. package/esm/utils/urls.js +31 -0
  640. package/esm/utils/urls.js.map +1 -0
  641. package/esm/validation/database/exists-except-current-id.d.ts +7 -0
  642. package/esm/validation/database/exists-except-current-id.d.ts.map +1 -0
  643. package/esm/validation/database/exists-except-current-id.js +23 -0
  644. package/esm/validation/database/exists-except-current-id.js.map +1 -0
  645. package/esm/validation/database/exists-except-current-user.d.ts +7 -0
  646. package/esm/validation/database/exists-except-current-user.d.ts.map +1 -0
  647. package/esm/validation/database/exists-except-current-user.js +25 -0
  648. package/esm/validation/database/exists-except-current-user.js.map +1 -0
  649. package/esm/validation/database/exists.d.ts +7 -0
  650. package/esm/validation/database/exists.d.ts.map +1 -0
  651. package/esm/validation/database/exists.js +21 -0
  652. package/esm/validation/database/exists.js.map +1 -0
  653. package/esm/validation/database/index.d.ts +12 -0
  654. package/esm/validation/database/index.d.ts.map +1 -0
  655. package/esm/validation/database/types.d.ts +68 -0
  656. package/esm/validation/database/types.d.ts.map +1 -0
  657. package/esm/validation/database/unique-except-current-id.d.ts +7 -0
  658. package/esm/validation/database/unique-except-current-id.d.ts.map +1 -0
  659. package/esm/validation/database/unique-except-current-id.js +23 -0
  660. package/esm/validation/database/unique-except-current-id.js.map +1 -0
  661. package/esm/validation/database/unique-except-current-user.d.ts +7 -0
  662. package/esm/validation/database/unique-except-current-user.d.ts.map +1 -0
  663. package/esm/validation/database/unique-except-current-user.js +25 -0
  664. package/esm/validation/database/unique-except-current-user.js.map +1 -0
  665. package/esm/validation/database/unique.d.ts +7 -0
  666. package/esm/validation/database/unique.d.ts.map +1 -0
  667. package/esm/validation/database/unique.js +30 -0
  668. package/esm/validation/database/unique.js.map +1 -0
  669. package/esm/validation/file/file.d.ts +22 -0
  670. package/esm/validation/file/file.d.ts.map +1 -0
  671. package/esm/validation/file/file.js +60 -0
  672. package/esm/validation/file/file.js.map +1 -0
  673. package/esm/validation/file/index.d.ts +6 -0
  674. package/esm/validation/file/index.d.ts.map +1 -0
  675. package/esm/validation/index.d.ts +16 -0
  676. package/esm/validation/index.d.ts.map +1 -0
  677. package/esm/validation/init.d.ts +7 -0
  678. package/esm/validation/init.d.ts.map +1 -0
  679. package/esm/validation/init.js +36 -0
  680. package/esm/validation/init.js.map +1 -0
  681. package/esm/validation/plugins/database-plugin.d.ts +14 -0
  682. package/esm/validation/plugins/database-plugin.d.ts.map +1 -0
  683. package/esm/validation/plugins/database-plugin.js +95 -0
  684. package/esm/validation/plugins/database-plugin.js.map +1 -0
  685. package/esm/validation/plugins/file-plugin.d.ts +11 -0
  686. package/esm/validation/plugins/file-plugin.d.ts.map +1 -0
  687. package/esm/validation/plugins/file-plugin.js +17 -0
  688. package/esm/validation/plugins/file-plugin.js.map +1 -0
  689. package/esm/validation/plugins/index.d.ts +9 -0
  690. package/esm/validation/plugins/index.d.ts.map +1 -0
  691. package/esm/validation/plugins/localized-plugin.d.ts +11 -0
  692. package/esm/validation/plugins/localized-plugin.d.ts.map +1 -0
  693. package/esm/validation/plugins/localized-plugin.js +19 -0
  694. package/esm/validation/plugins/localized-plugin.js.map +1 -0
  695. package/esm/validation/types.d.ts +87 -0
  696. package/esm/validation/types.d.ts.map +1 -0
  697. package/esm/validation/validateAll.d.ts +7 -0
  698. package/esm/validation/validateAll.d.ts.map +1 -0
  699. package/esm/validation/validateAll.js +60 -0
  700. package/esm/validation/validateAll.js.map +1 -0
  701. package/esm/validation/validators/file-validator.d.ts +46 -0
  702. package/esm/validation/validators/file-validator.d.ts.map +1 -0
  703. package/esm/validation/validators/file-validator.js +112 -0
  704. package/esm/validation/validators/file-validator.js.map +1 -0
  705. package/esm/validation/validators/index.d.ts +7 -0
  706. package/esm/validation/validators/index.d.ts.map +1 -0
  707. package/esm/warlock-config/default-configurations.d.ts +3 -0
  708. package/esm/warlock-config/default-configurations.d.ts.map +1 -0
  709. package/esm/warlock-config/default-configurations.js +8 -0
  710. package/esm/warlock-config/default-configurations.js.map +1 -0
  711. package/esm/warlock-config/define-config.d.ts +3 -0
  712. package/esm/warlock-config/define-config.d.ts.map +1 -0
  713. package/esm/warlock-config/define-config.js +3 -0
  714. package/esm/warlock-config/define-config.js.map +1 -0
  715. package/esm/warlock-config/index.d.ts +4 -0
  716. package/esm/warlock-config/index.d.ts.map +1 -0
  717. package/esm/warlock-config/types.d.ts +79 -0
  718. package/esm/warlock-config/types.d.ts.map +1 -0
  719. package/esm/warlock-config/warlock-config.manager.d.ts +83 -0
  720. package/esm/warlock-config/warlock-config.manager.d.ts.map +1 -0
  721. package/esm/warlock-config/warlock-config.manager.js +141 -0
  722. package/esm/warlock-config/warlock-config.manager.js.map +1 -0
  723. package/package.json +66 -71
@@ -0,0 +1,945 @@
1
+ import events from'@mongez/events';import fs from'fs';import path from'path';import {storageConfig}from'./config.js';import {storageDriverContext}from'./context/storage-driver-context.js';import {DOSpacesDriver}from'./drivers/do-spaces-driver.js';import {LocalDriver}from'./drivers/local-driver.js';import {R2Driver}from'./drivers/r2-driver.js';import {S3Driver}from'./drivers/s3-driver.js';import {ScopedStorage}from'./scoped-storage.js';import {StorageFile}from'./storage-file.js';/**
2
+ * Storage Manager
3
+ *
4
+ * Provides a unified interface for file storage operations across multiple
5
+ * drivers (local, S3, R2, DigitalOcean Spaces). Extends `ScopedStorage` to
6
+ * inherit all base operations while adding driver management and events.
7
+ *
8
+ * All operations return `StorageFile` instances for a consistent, rich DX.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // Basic usage (uses default driver)
13
+ * const file = await storage.put(buffer, "uploads/image.jpg");
14
+ *
15
+ * // With options
16
+ * const file = await storage.put(buffer, "uploads/image.jpg", {
17
+ * mimeType: "image/jpeg",
18
+ * cacheControl: "max-age=31536000"
19
+ * });
20
+ *
21
+ * // Using specific driver (also returns StorageFile)
22
+ * const file = await storage.use("s3").put(buffer, "path/to/file");
23
+ *
24
+ * // Get raw driver for advanced use
25
+ * const driver = storage.driver("s3");
26
+ * const data = await driver.put(buffer, "path/to/file"); // Returns StorageFileData
27
+ *
28
+ * // Stream operations for large files
29
+ * const stream = await storage.getStream("large-file.zip");
30
+ * await storage.putStream(readableStream, "output/file.zip");
31
+ *
32
+ * // Batch operations
33
+ * const results = await storage.deleteMany(["file1.txt", "file2.txt"]);
34
+ *
35
+ * // Event hooks
36
+ * storage.on("afterPut", ({ location, file }) => {
37
+ * console.log(`Uploaded ${location}`);
38
+ * });
39
+ * ```
40
+ */
41
+ class Storage extends ScopedStorage {
42
+ /**
43
+ * Registered drivers (cached instances)
44
+ * @internal
45
+ */
46
+ drivers = new Map();
47
+ /**
48
+ * Driver configurations
49
+ * @internal
50
+ */
51
+ configs = new Map();
52
+ /**
53
+ * Default driver name
54
+ * @internal
55
+ */
56
+ defaultDriverName;
57
+ /**
58
+ * Whether the storage has been initialized
59
+ * @internal
60
+ */
61
+ initialized = false;
62
+ /**
63
+ * Create a new Storage manager instance
64
+ *
65
+ * Uses lazy initialization - driver is resolved on first access.
66
+ */
67
+ constructor() {
68
+ // Temp placeholder - will be replaced on first access
69
+ super(null);
70
+ }
71
+ /**
72
+ * Ensure storage is initialized (lazy initialization)
73
+ *
74
+ * Called automatically on first driver access.
75
+ */
76
+ async init() {
77
+ if (this.initialized)
78
+ return;
79
+ // Mark as initialized FIRST to prevent infinite recursion
80
+ this.initialized = true;
81
+ // Get default driver name from config
82
+ const defaultName = storageConfig("default", "local");
83
+ this.defaultDriverName = defaultName;
84
+ this.loadDriversFromConfig();
85
+ // Now set the actual driver
86
+ this._driver = this.resolveDriver(this.defaultDriverName);
87
+ }
88
+ /**
89
+ * Reset storage defaults
90
+ */
91
+ reset() {
92
+ this.initialized = false;
93
+ this.drivers.clear();
94
+ this.configs.clear();
95
+ this.defaultDriverName = null;
96
+ this._driver = null;
97
+ }
98
+ /**
99
+ * Get the currently active driver (context-aware in future)
100
+ *
101
+ * Currently returns the default driver.
102
+ * Will be enhanced to check AsyncLocalStorage context for multi-tenant support.
103
+ *
104
+ * @returns The active storage driver
105
+ */
106
+ get activeDriver() {
107
+ // Check context for tenant-specific driver
108
+ const contextDriver = storageDriverContext.getDriver();
109
+ if (contextDriver)
110
+ return contextDriver;
111
+ return this._driver;
112
+ }
113
+ // ============================================================
114
+ // Driver Management
115
+ // ============================================================
116
+ /**
117
+ * Load drivers from configuration
118
+ * @internal
119
+ */
120
+ loadDriversFromConfig() {
121
+ const drivers = storageConfig("drivers", {});
122
+ for (const [name, config] of Object.entries(drivers)) {
123
+ this.configs.set(name, config);
124
+ }
125
+ }
126
+ /**
127
+ * Get a scoped storage for a specific driver
128
+ *
129
+ * Returns a `ScopedStorage` instance that wraps the specified driver.
130
+ * Operations on the returned instance also return `StorageFile` objects.
131
+ *
132
+ * @param name - Driver name as defined in configuration
133
+ * @returns ScopedStorage instance for the specified driver
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * // Upload to S3
138
+ * const s3File = await storage.use("s3").put(buffer, "images/photo.jpg");
139
+ *
140
+ * // Upload to local
141
+ * const localFile = await storage.use("local").put(buffer, "temp/file.txt");
142
+ *
143
+ * // Both return StorageFile with identical API
144
+ * console.log(s3File.url);
145
+ * console.log(localFile.url);
146
+ * ```
147
+ */
148
+ use(name) {
149
+ return new ScopedStorage(this.getDriver(name));
150
+ }
151
+ /**
152
+ * Get a raw driver instance
153
+ *
154
+ * Returns the underlying driver directly for advanced use cases.
155
+ * Unlike `use()`, calling methods on the raw driver returns
156
+ * `StorageFileData` instead of `StorageFile`.
157
+ *
158
+ * @param name - Driver name as defined in configuration
159
+ * @returns Raw driver instance implementing StorageDriverContract
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * const driver = storage.getDriver("s3");
164
+ * const data = await driver.put(buffer, "path/to/file");
165
+ * // data is StorageFileData, not StorageFile
166
+ * ```
167
+ */
168
+ getDriver(name) {
169
+ return this.resolveDriver(name);
170
+ }
171
+ /**
172
+ * Get root directory of current driver
173
+ */
174
+ root(apepndedPath) {
175
+ const rootPath = this.activeDriver.options?.root || "";
176
+ return path.join(rootPath, apepndedPath || "");
177
+ }
178
+ /**
179
+ * Use a cloud storage driver with extended cloud capabilities
180
+ *
181
+ * @param name - Cloud driver name (s3, r2, spaces)
182
+ * @returns Driver instance implementing CloudStorageDriverContract
183
+ * @throws Error if driver doesn't support cloud operations
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * const cloudDriver = storage.useCloud("s3");
188
+ * const presignedUrl = await cloudDriver.getPresignedUrl("private/doc.pdf");
189
+ * ```
190
+ */
191
+ useCloud(name) {
192
+ const instance = this.getDriver(name);
193
+ if (!this.isCloudDriver(instance)) {
194
+ throw new Error(`Driver "${name}" does not support cloud operations`);
195
+ }
196
+ return instance;
197
+ }
198
+ /**
199
+ * Register a new driver configuration at runtime
200
+ *
201
+ * Allows dynamic driver registration for multi-tenancy or
202
+ * runtime configuration scenarios.
203
+ *
204
+ * @param name - Unique driver name
205
+ * @param config - Driver configuration
206
+ * @returns This instance for chaining
207
+ *
208
+ * @example
209
+ * ```typescript
210
+ * storage.register("tenant-s3", {
211
+ * driver: "s3",
212
+ * bucket: "tenant-bucket",
213
+ * region: "us-east-1",
214
+ * accessKeyId: process.env.TENANT_AWS_KEY,
215
+ * secretAccessKey: process.env.TENANT_AWS_SECRET
216
+ * });
217
+ *
218
+ * await storage.use("tenant-s3").put(buffer, "file.txt");
219
+ * ```
220
+ */
221
+ register(name, config) {
222
+ this.configs.set(name, config);
223
+ this.drivers.delete(name); // Clear cached instance
224
+ return this;
225
+ }
226
+ /**
227
+ * Set the default driver name
228
+ *
229
+ * @param name - Driver name to use as default
230
+ * @returns This instance for chaining
231
+ *
232
+ * @example
233
+ * ```typescript
234
+ * storage.setDefault("s3");
235
+ * await storage.put(buffer, "file.txt"); // Now uses S3
236
+ * ```
237
+ */
238
+ setDefault(name) {
239
+ this.defaultDriverName = name;
240
+ this._driver = this.getDriver(name);
241
+ return this;
242
+ }
243
+ /**
244
+ * Check if current driver is a cloud driver
245
+ *
246
+ * @returns Promise resolving to true if the current driver supports cloud operations
247
+ */
248
+ async isCloud() {
249
+ return this.isCloudDriver(this.activeDriver);
250
+ }
251
+ /**
252
+ * Check if a driver instance supports cloud operations
253
+ * @internal
254
+ */
255
+ isCloudDriver(driver) {
256
+ return "getPresignedUrl" in driver;
257
+ }
258
+ // ============================================================
259
+ // Event System
260
+ // ============================================================
261
+ /**
262
+ * Register an event handler
263
+ *
264
+ * Subscribe to storage events for logging, analytics, or side effects.
265
+ *
266
+ * @param event - Event type to listen for
267
+ * @param handler - Handler function
268
+ * @returns Event subscription for unsubscribing
269
+ *
270
+ * @example
271
+ * ```typescript
272
+ * // Log all uploads
273
+ * storage.on("afterPut", ({ location, file }) => {
274
+ * console.log(`Uploaded ${file?.size} bytes to ${location}`);
275
+ * });
276
+ *
277
+ * // Track deletions
278
+ * storage.on("afterDelete", ({ location }) => {
279
+ * analytics.track("file_deleted", { path: location });
280
+ * });
281
+ * ```
282
+ */
283
+ on(event, handler) {
284
+ return events.subscribe(`storage.${event}`, handler);
285
+ }
286
+ /**
287
+ * Remove all handlers for an event type
288
+ *
289
+ * @param event - Event type to remove handlers for
290
+ * @returns This instance for chaining
291
+ *
292
+ * @example
293
+ * ```typescript
294
+ * storage.off("afterPut"); // Remove all afterPut handlers
295
+ * ```
296
+ */
297
+ off(event) {
298
+ events.off(`storage.${event}`);
299
+ return this;
300
+ }
301
+ /**
302
+ * Emit an event to all registered handlers
303
+ * @internal
304
+ */
305
+ async emit(event, payload) {
306
+ await events.triggerAll(`storage.${event}`, payload);
307
+ }
308
+ // ============================================================
309
+ // Overridden Operations with Events
310
+ // ============================================================
311
+ /**
312
+ * Store a file in storage
313
+ *
314
+ * Extends base `put()` with event emission for beforePut/afterPut hooks.
315
+ *
316
+ * @param file - File content as Buffer, string, UploadedFile, or Readable stream
317
+ * @param location - Destination path
318
+ * @param options - Storage options (mimeType, cacheControl, etc.)
319
+ * @returns StorageFile instance with cached metadata
320
+ */
321
+ async put(file, location, options) {
322
+ const driver = this.activeDriver;
323
+ const buffer = await this.toBuffer(file);
324
+ await this.emit("beforePut", {
325
+ driver: driver.name,
326
+ location,
327
+ timestamp: new Date(),
328
+ size: buffer.length,
329
+ });
330
+ const result = await driver.put(buffer, location, options);
331
+ await this.emit("afterPut", {
332
+ driver: driver.name,
333
+ location,
334
+ timestamp: new Date(),
335
+ file: result,
336
+ });
337
+ return StorageFile.fromData(result, driver);
338
+ }
339
+ /**
340
+ * Store a file from a readable stream (for large files)
341
+ *
342
+ * Extends base `putStream()` with event emission.
343
+ *
344
+ * @param stream - Readable stream
345
+ * @param location - Destination path
346
+ * @param options - Storage options
347
+ * @returns StorageFile instance with cached metadata
348
+ */
349
+ async putStream(stream, location, options) {
350
+ const driver = this.activeDriver;
351
+ await this.emit("beforePut", {
352
+ driver: driver.name,
353
+ location,
354
+ timestamp: new Date(),
355
+ });
356
+ if (typeof stream === "string") {
357
+ stream = fs.createReadStream(stream);
358
+ }
359
+ const result = await driver.putStream(stream, location, options);
360
+ await this.emit("afterPut", {
361
+ driver: driver.name,
362
+ location,
363
+ timestamp: new Date(),
364
+ file: result,
365
+ });
366
+ return StorageFile.fromData(result, driver);
367
+ }
368
+ /**
369
+ * Store a file from a URL
370
+ *
371
+ * Downloads content from the URL and stores it at the specified location.
372
+ *
373
+ * @param url - Source URL to download from
374
+ * @param location - Destination path
375
+ * @param options - Storage options
376
+ * @returns StorageFile instance with cached metadata
377
+ *
378
+ * @example
379
+ * ```typescript
380
+ * const file = await storage.putFromUrl(
381
+ * "https://example.com/image.jpg",
382
+ * "downloads/image.jpg"
383
+ * );
384
+ * ```
385
+ */
386
+ async putFromUrl(url, location, options) {
387
+ const response = await fetch(url);
388
+ if (!response.ok) {
389
+ throw new Error(`Failed to fetch file from URL: ${response.statusText}`);
390
+ }
391
+ const arrayBuffer = await response.arrayBuffer();
392
+ const buffer = Buffer.from(arrayBuffer);
393
+ const mimeType = options?.mimeType || response.headers.get("content-type") || undefined;
394
+ return this.put(buffer, location, { ...options, mimeType });
395
+ }
396
+ /**
397
+ * Store a file from base64 encoded string
398
+ *
399
+ * Decodes base64 content (with optional data URL prefix) and stores it.
400
+ *
401
+ * @param base64 - Base64 encoded file content (or data URL)
402
+ * @param location - Destination path
403
+ * @param options - Storage options
404
+ * @returns StorageFile instance with cached metadata
405
+ *
406
+ * @example
407
+ * ```typescript
408
+ * // From plain base64
409
+ * const file = await storage.putFromBase64(base64String, "images/photo.jpg");
410
+ *
411
+ * // From data URL (auto-extracts MIME type)
412
+ * const file = await storage.putFromBase64(
413
+ * "data:image/png;base64,iVBORw0KGgo...",
414
+ * "images/photo.png"
415
+ * );
416
+ * ```
417
+ */
418
+ async putFromBase64(base64, location, options) {
419
+ let data = base64;
420
+ let mimeType = options?.mimeType;
421
+ if (base64.startsWith("data:")) {
422
+ const match = base64.match(/^data:([^;]+);base64,(.+)$/);
423
+ if (match) {
424
+ mimeType = mimeType || match[1];
425
+ data = match[2];
426
+ }
427
+ }
428
+ const buffer = Buffer.from(data, "base64");
429
+ return this.put(buffer, location, { ...options, mimeType });
430
+ }
431
+ /**
432
+ * Retrieve file contents as Buffer
433
+ *
434
+ * Uses the current driver (with async resolution).
435
+ *
436
+ * @param location - File path
437
+ * @returns Buffer containing file contents
438
+ */
439
+ async get(location) {
440
+ return this.activeDriver.get(location);
441
+ }
442
+ /**
443
+ * Get JSON content from a file
444
+ *
445
+ * Downloads and parses JSON file content.
446
+ *
447
+ * @param location - File path
448
+ * @returns Parsed JSON content
449
+ *
450
+ * @example
451
+ * ```typescript
452
+ * const config = await storage.getJson("config/settings.json");
453
+ * console.log(config.apiKey);
454
+ * ```
455
+ */
456
+ async getJson(location) {
457
+ const buffer = await this.get(location);
458
+ return JSON.parse(buffer.toString());
459
+ }
460
+ /**
461
+ * Retrieve a file as a readable stream (for large files)
462
+ *
463
+ * @param location - File path
464
+ * @returns Readable stream of file contents
465
+ */
466
+ async getStream(location) {
467
+ return this.activeDriver.getStream(location);
468
+ }
469
+ /**
470
+ * Delete a file
471
+ *
472
+ * Extends base `delete()` with event emission.
473
+ *
474
+ * @param location - File path or StorageFile
475
+ * @returns true if deleted, false if not found
476
+ */
477
+ async delete(location) {
478
+ const driver = this.activeDriver;
479
+ const path = typeof location === "string" ? location : location.path;
480
+ await this.emit("beforeDelete", {
481
+ driver: driver.name,
482
+ location: path,
483
+ timestamp: new Date(),
484
+ });
485
+ const result = await driver.delete(path);
486
+ await this.emit("afterDelete", {
487
+ driver: driver.name,
488
+ location: path,
489
+ timestamp: new Date(),
490
+ });
491
+ return result;
492
+ }
493
+ /**
494
+ * Delete multiple files at once
495
+ *
496
+ * @param locations - Array of file paths
497
+ * @returns Array of delete results with status for each file
498
+ */
499
+ async deleteMany(locations) {
500
+ return this.activeDriver.deleteMany(locations);
501
+ }
502
+ /**
503
+ * Check if a file exists
504
+ *
505
+ * @param location - File path
506
+ * @returns true if file exists
507
+ */
508
+ async exists(location) {
509
+ return this.activeDriver.exists(location);
510
+ }
511
+ /**
512
+ * Copy a file to a new location
513
+ *
514
+ * Extends base `copy()` with event emission.
515
+ *
516
+ * @param from - Source path or StorageFile
517
+ * @param to - Destination path
518
+ * @returns StorageFile instance at destination
519
+ */
520
+ async copy(from, to) {
521
+ const driver = this.activeDriver;
522
+ const fromPath = typeof from === "string" ? from : from.path;
523
+ await this.emit("beforeCopy", {
524
+ driver: driver.name,
525
+ location: to,
526
+ from: fromPath,
527
+ to,
528
+ timestamp: new Date(),
529
+ });
530
+ const result = await driver.copy(fromPath, to);
531
+ await this.emit("afterCopy", {
532
+ driver: driver.name,
533
+ location: to,
534
+ from: fromPath,
535
+ to,
536
+ timestamp: new Date(),
537
+ file: result,
538
+ });
539
+ return StorageFile.fromData(result, driver);
540
+ }
541
+ /**
542
+ * Move a file to a new location
543
+ *
544
+ * Extends base `move()` with event emission.
545
+ *
546
+ * @param from - Source path or StorageFile
547
+ * @param to - Destination path
548
+ * @returns StorageFile instance at destination
549
+ */
550
+ async move(from, to) {
551
+ const driver = this.activeDriver;
552
+ const fromPath = typeof from === "string" ? from : from.path;
553
+ await this.emit("beforeMove", {
554
+ driver: driver.name,
555
+ location: to,
556
+ from: fromPath,
557
+ to,
558
+ timestamp: new Date(),
559
+ });
560
+ const result = await driver.move(fromPath, to);
561
+ await this.emit("afterMove", {
562
+ driver: driver.name,
563
+ location: to,
564
+ from: fromPath,
565
+ to,
566
+ timestamp: new Date(),
567
+ file: result,
568
+ });
569
+ return StorageFile.fromData(result, driver);
570
+ }
571
+ /**
572
+ * List files in a directory
573
+ *
574
+ * @param directory - Directory path (defaults to root)
575
+ * @param options - List options (recursive, limit, etc.)
576
+ * @returns Array of file information objects
577
+ */
578
+ async list(directory, options) {
579
+ return this.activeDriver.list(directory || "", options);
580
+ }
581
+ // ============================================================
582
+ // Metadata Operations
583
+ // ============================================================
584
+ /**
585
+ * Get file metadata without downloading
586
+ *
587
+ * @param location - File path
588
+ * @returns File information object
589
+ */
590
+ async getInfo(location) {
591
+ return this.activeDriver.getInfo(location);
592
+ }
593
+ /**
594
+ * Get file size in bytes
595
+ *
596
+ * @param location - File path
597
+ * @returns File size in bytes
598
+ */
599
+ async size(location) {
600
+ return this.activeDriver.size(location);
601
+ }
602
+ /**
603
+ * Get a StorageFile instance for OOP-style operations
604
+ *
605
+ * @param location - File path
606
+ * @returns StorageFile instance
607
+ */
608
+ async file(location) {
609
+ return new StorageFile(location, this.activeDriver);
610
+ }
611
+ // ============================================================
612
+ // Path Operations (Local Driver Only)
613
+ // ============================================================
614
+ /**
615
+ * Get the absolute filesystem path for a location
616
+ *
617
+ * Only available for local driver.
618
+ *
619
+ * @param location - File path
620
+ * @throws Error if current driver is not a local driver
621
+ * @returns Absolute filesystem path
622
+ */
623
+ async path(location) {
624
+ const driver = this.activeDriver;
625
+ if (!("path" in driver) || typeof driver.path !== "function") {
626
+ throw new Error("path() is only available for local storage drivers");
627
+ }
628
+ return driver.path(location);
629
+ }
630
+ // ============================================================
631
+ // Cloud-Specific Operations
632
+ // ============================================================
633
+ /**
634
+ * Get a presigned URL for downloading a file
635
+ *
636
+ * Only available for cloud drivers.
637
+ *
638
+ * @param location - File path
639
+ * @param options - Presigned URL options (expiresIn)
640
+ * @throws Error if current driver is not a cloud driver
641
+ * @returns Presigned download URL
642
+ *
643
+ * @example
644
+ * ```typescript
645
+ * const url = await storage.getPresignedUrl("private/document.pdf", {
646
+ * expiresIn: 3600 // 1 hour
647
+ * });
648
+ * ```
649
+ */
650
+ async getPresignedUrl(location, options) {
651
+ const driver = this.activeDriver;
652
+ if (!this.isCloudDriver(driver)) {
653
+ throw new Error("Presigned URLs are only available for cloud storage drivers");
654
+ }
655
+ return driver.getPresignedUrl(location, options);
656
+ }
657
+ /**
658
+ * Get a presigned URL for uploading a file directly to cloud storage
659
+ *
660
+ * Only available for cloud drivers.
661
+ *
662
+ * @param location - Destination path
663
+ * @param options - Upload options (expiresIn, contentType, maxSize)
664
+ * @throws Error if current driver is not a cloud driver
665
+ * @returns Presigned upload URL
666
+ *
667
+ * @example
668
+ * ```typescript
669
+ * const uploadUrl = await storage.getPresignedUploadUrl("uploads/file.pdf", {
670
+ * expiresIn: 3600,
671
+ * contentType: "application/pdf"
672
+ * });
673
+ *
674
+ * // Client can PUT directly to this URL
675
+ * ```
676
+ */
677
+ async getPresignedUploadUrl(location, options) {
678
+ const driver = this.activeDriver;
679
+ if (!this.isCloudDriver(driver)) {
680
+ throw new Error("Presigned upload URLs are only available for cloud storage drivers");
681
+ }
682
+ return driver.getPresignedUploadUrl(location, options);
683
+ }
684
+ /**
685
+ * Get the bucket name for cloud storage
686
+ *
687
+ * Only available for cloud drivers.
688
+ *
689
+ * @throws Error if current driver is not a cloud driver
690
+ * @returns Bucket name
691
+ */
692
+ async getBucket() {
693
+ const driver = this.activeDriver;
694
+ if (!this.isCloudDriver(driver)) {
695
+ throw new Error("Bucket information is only available for cloud storage drivers");
696
+ }
697
+ return driver.getBucket();
698
+ }
699
+ /**
700
+ * Get the region for cloud storage
701
+ *
702
+ * Only available for cloud drivers.
703
+ *
704
+ * @throws Error if current driver is not a cloud driver
705
+ * @returns Region name
706
+ */
707
+ async getRegion() {
708
+ const driver = this.activeDriver;
709
+ if (!this.isCloudDriver(driver)) {
710
+ throw new Error("Region information is only available for cloud storage drivers");
711
+ }
712
+ return driver.getRegion();
713
+ }
714
+ /**
715
+ * Set storage class for a file (e.g., STANDARD, GLACIER, etc.)
716
+ *
717
+ * Only available for cloud drivers.
718
+ *
719
+ * @param location - File path
720
+ * @param storageClass - Target storage class
721
+ * @throws Error if current driver is not a cloud driver
722
+ */
723
+ async setStorageClass(location, storageClass) {
724
+ const driver = this.activeDriver;
725
+ if (!this.isCloudDriver(driver)) {
726
+ throw new Error("Storage class is only available for cloud storage drivers");
727
+ }
728
+ return driver.setStorageClass(location, storageClass);
729
+ }
730
+ /**
731
+ * Set file visibility (public or private)
732
+ *
733
+ * Only available for cloud drivers.
734
+ *
735
+ * @param location - File path
736
+ * @param visibility - "public" or "private"
737
+ * @throws Error if current driver is not a cloud driver
738
+ */
739
+ async setVisibility(location, visibility) {
740
+ const driver = this.activeDriver;
741
+ if (!this.isCloudDriver(driver)) {
742
+ throw new Error("Visibility is only available for cloud storage drivers");
743
+ }
744
+ return driver.setVisibility(location, visibility);
745
+ }
746
+ /**
747
+ * Get file visibility
748
+ *
749
+ * Only available for cloud drivers.
750
+ *
751
+ * @param location - File path
752
+ * @throws Error if current driver is not a cloud driver
753
+ * @returns Current visibility setting
754
+ */
755
+ async getVisibility(location) {
756
+ const driver = this.activeDriver;
757
+ if (!this.isCloudDriver(driver)) {
758
+ throw new Error("Visibility is only available for cloud storage drivers");
759
+ }
760
+ return driver.getVisibility(location);
761
+ }
762
+ /**
763
+ * Get a temporary signed URL
764
+ *
765
+ * Creates a URL that provides temporary access to the file.
766
+ *
767
+ * @param location - File path
768
+ * @param expiresIn - Seconds until expiration (default: 3600)
769
+ * @returns Signed URL string
770
+ */
771
+ async temporaryUrl(location, expiresIn) {
772
+ return this.activeDriver.temporaryUrl(location, expiresIn);
773
+ }
774
+ /**
775
+ * Validate a temporary URL token
776
+ *
777
+ * For local driver: validates HMAC-signed tokens
778
+ * For cloud drivers: returns invalid (cloud validates via presigned URL)
779
+ *
780
+ * @param token - The token from the temporary URL
781
+ * @returns Validation result with file info and convenience methods
782
+ *
783
+ * @example
784
+ * ```typescript
785
+ * const result = await storage.validateTemporaryToken(token);
786
+ *
787
+ * if (!result.valid) {
788
+ * return response.status(403).send(result.error);
789
+ * }
790
+ *
791
+ * // For local driver - use sendFile for efficiency
792
+ * if (result.absolutePath) {
793
+ * return response.sendFile(result.absolutePath);
794
+ * }
795
+ *
796
+ * // For cloud driver - stream the file
797
+ * const stream = await result.getStream!();
798
+ * stream.pipe(response.raw);
799
+ * ```
800
+ */
801
+ async validateTemporaryToken(token) {
802
+ // Check if driver supports token validation
803
+ if (!("validateTemporaryToken" in this.activeDriver) ||
804
+ typeof this.activeDriver.validateTemporaryToken !== "function") {
805
+ // For cloud drivers, temporary URLs are presigned and validated by the cloud provider
806
+ return {
807
+ valid: false,
808
+ error: "invalid_token",
809
+ };
810
+ }
811
+ return this.activeDriver.validateTemporaryToken(token);
812
+ }
813
+ // ============================================================
814
+ // Configuration Parsing
815
+ // ============================================================
816
+ /**
817
+ * Parse config into driver-specific options
818
+ * @internal
819
+ */
820
+ parseOptions(config) {
821
+ const { driver, ...options } = config;
822
+ switch (driver) {
823
+ case "local":
824
+ return {
825
+ root: options.root,
826
+ urlPrefix: options.urlPrefix,
827
+ signatureKey: options.signatureKey,
828
+ };
829
+ case "s3":
830
+ this.validateCloudConfig(config, "s3");
831
+ return {
832
+ ...options,
833
+ bucket: options.bucket,
834
+ region: options.region,
835
+ accessKeyId: options.accessKeyId,
836
+ secretAccessKey: options.secretAccessKey,
837
+ endpoint: options.endpoint,
838
+ urlPrefix: options.urlPrefix,
839
+ };
840
+ case "r2":
841
+ this.validateCloudConfig(config, "r2");
842
+ if (!options.accountId) {
843
+ throw new Error('R2 driver requires "accountId" configuration');
844
+ }
845
+ return {
846
+ ...options,
847
+ region: options.region || "auto",
848
+ bucket: options.bucket,
849
+ accessKeyId: options.accessKeyId,
850
+ secretAccessKey: options.secretAccessKey,
851
+ endpoint: options.endpoint,
852
+ urlPrefix: options.urlPrefix,
853
+ accountId: options.accountId,
854
+ publicDomain: options.publicDomain,
855
+ };
856
+ case "spaces":
857
+ this.validateCloudConfig(config, "spaces");
858
+ return {
859
+ ...options,
860
+ bucket: options.bucket,
861
+ region: options.region,
862
+ accessKeyId: options.accessKeyId,
863
+ secretAccessKey: options.secretAccessKey,
864
+ endpoint: options.endpoint,
865
+ urlPrefix: options.urlPrefix,
866
+ };
867
+ default:
868
+ throw new Error(`Unknown driver type: ${driver}`);
869
+ }
870
+ }
871
+ /**
872
+ * Validate cloud driver configuration has required fields
873
+ * @internal
874
+ */
875
+ validateCloudConfig(config, driverName) {
876
+ const required = ["bucket", "accessKeyId", "secretAccessKey"];
877
+ if (driverName !== "r2") {
878
+ required.push("region");
879
+ }
880
+ for (const field of required) {
881
+ if (!config[field]) {
882
+ throw new Error(`${driverName.toUpperCase()} driver requires "${field}" configuration`);
883
+ }
884
+ }
885
+ }
886
+ /**
887
+ * Get or create driver instance from cache
888
+ * @internal
889
+ */
890
+ resolveDriver(name) {
891
+ // Ensure configs are loaded
892
+ if (this.drivers.has(name)) {
893
+ return this.drivers.get(name);
894
+ }
895
+ const config = this.configs.get(name);
896
+ if (!config) {
897
+ throw new Error(`Storage driver "${name}" is not configured`);
898
+ }
899
+ const options = this.parseOptions(config);
900
+ let driver;
901
+ switch (config.driver) {
902
+ case "local":
903
+ driver = new LocalDriver(options);
904
+ break;
905
+ case "s3":
906
+ driver = new S3Driver(options);
907
+ break;
908
+ case "r2":
909
+ driver = new R2Driver(options);
910
+ break;
911
+ case "spaces":
912
+ driver = new DOSpacesDriver(options);
913
+ break;
914
+ default:
915
+ throw new Error(`Unknown storage driver type: ${config.driver}`);
916
+ }
917
+ this.drivers.set(name, driver);
918
+ return driver;
919
+ }
920
+ /**
921
+ * Resolve the default driver name (supports async resolver for multi-tenancy)
922
+ * @internal
923
+ */
924
+ async resolveDefaultDriver() {
925
+ const resolver = storageConfig("resolver");
926
+ if (resolver) {
927
+ const resolved = await resolver();
928
+ return resolved || this.defaultDriverName;
929
+ }
930
+ return this.defaultDriverName;
931
+ }
932
+ }
933
+ /**
934
+ * Singleton storage instance
935
+ *
936
+ * Pre-configured storage manager ready for use throughout the application.
937
+ *
938
+ * @example
939
+ * ```typescript
940
+ * import { storage } from "@warlock.js/core";
941
+ *
942
+ * const file = await storage.put(buffer, "uploads/file.txt");
943
+ * ```
944
+ */
945
+ const storage = new Storage();export{Storage,storage};//# sourceMappingURL=storage.js.map