@kiyasov/platform-hono 1.4.1 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +1 -0
- package/.prettierrc +3 -0
- package/dist/build.d.ts +1 -0
- package/dist/build.js +28 -0
- package/dist/build.js.map +1 -0
- package/dist/cjs/index.d.ts +4 -4
- package/dist/cjs/src/adapters/hono-adapter.d.ts +22 -15
- package/dist/cjs/src/adapters/hono-adapter.js +60 -58
- package/dist/cjs/src/adapters/hono-adapter.js.map +1 -1
- package/dist/cjs/src/adapters/index.d.ts +1 -1
- package/dist/cjs/src/drivers/graphQLUpload/GraphQLUpload.d.ts +2 -2
- package/dist/cjs/src/drivers/graphQLUpload/GraphQLUpload.js +6 -6
- package/dist/cjs/src/drivers/graphQLUpload/GraphQLUpload.js.map +1 -1
- package/dist/cjs/src/drivers/graphQLUpload/Upload.d.ts +1 -1
- package/dist/cjs/src/drivers/graphQLUpload/fs-capacitor.d.ts +8 -8
- package/dist/cjs/src/drivers/graphQLUpload/fs-capacitor.js +30 -30
- package/dist/cjs/src/drivers/graphQLUpload/fs-capacitor.js.map +1 -1
- package/dist/cjs/src/drivers/graphQLUpload/index.d.ts +4 -4
- package/dist/cjs/src/drivers/graphQLUpload/processRequest.d.ts +2 -2
- package/dist/cjs/src/drivers/graphQLUpload/processRequest.js +6 -6
- package/dist/cjs/src/drivers/graphQLUpload/processRequest.js.map +1 -1
- package/dist/cjs/src/drivers/graphql.driver.d.ts +4 -4
- package/dist/cjs/src/drivers/graphql.driver.js +12 -12
- package/dist/cjs/src/drivers/graphql.driver.js.map +1 -1
- package/dist/cjs/src/drivers/index.d.ts +2 -2
- package/dist/cjs/src/drivers/services/plugins-explorer.service.d.ts +1 -1
- package/dist/cjs/src/drivers/services/plugins-explorer.service.js.map +1 -1
- package/dist/cjs/src/interfaces/hono.interface.d.ts +1 -1
- package/dist/cjs/src/interfaces/index.d.ts +2 -2
- package/dist/cjs/src/interfaces/nest-hono-application.interface.d.ts +4 -4
- package/dist/cjs/src/multer/decorators/index.d.ts +2 -2
- package/dist/cjs/src/multer/decorators/uploaded-files-decorator.d.ts +1 -1
- package/dist/cjs/src/multer/decorators/uploaded-files-decorator.js.map +1 -1
- package/dist/cjs/src/multer/fs/index.js +8 -8
- package/dist/cjs/src/multer/fs/index.js.map +1 -1
- package/dist/cjs/src/multer/index.d.ts +4 -4
- package/dist/cjs/src/multer/interceptors/any-files-interceptor.d.ts +2 -2
- package/dist/cjs/src/multer/interceptors/any-files-interceptor.js +4 -4
- package/dist/cjs/src/multer/interceptors/any-files-interceptor.js.map +1 -1
- package/dist/cjs/src/multer/interceptors/file-fields-interceptor.d.ts +3 -3
- package/dist/cjs/src/multer/interceptors/file-fields-interceptor.js +4 -4
- package/dist/cjs/src/multer/interceptors/file-fields-interceptor.js.map +1 -1
- package/dist/cjs/src/multer/interceptors/file-interceptor.d.ts +2 -2
- package/dist/cjs/src/multer/interceptors/file-interceptor.js +4 -4
- package/dist/cjs/src/multer/interceptors/file-interceptor.js.map +1 -1
- package/dist/cjs/src/multer/interceptors/files-interceptor.d.ts +2 -2
- package/dist/cjs/src/multer/interceptors/files-interceptor.js +4 -4
- package/dist/cjs/src/multer/interceptors/files-interceptor.js.map +1 -1
- package/dist/cjs/src/multer/interceptors/index.d.ts +4 -4
- package/dist/cjs/src/multer/multipart/exceptions.js.map +1 -1
- package/dist/cjs/src/multer/multipart/file.d.ts +1 -1
- package/dist/cjs/src/multer/multipart/file.js.map +1 -1
- package/dist/cjs/src/multer/multipart/filter.d.ts +1 -1
- package/dist/cjs/src/multer/multipart/handlers/any-files.d.ts +6 -4
- package/dist/cjs/src/multer/multipart/handlers/any-files.js +1 -1
- package/dist/cjs/src/multer/multipart/handlers/any-files.js.map +1 -1
- package/dist/cjs/src/multer/multipart/handlers/file-fields.d.ts +9 -6
- package/dist/cjs/src/multer/multipart/handlers/file-fields.js +8 -20
- package/dist/cjs/src/multer/multipart/handlers/file-fields.js.map +1 -1
- package/dist/cjs/src/multer/multipart/handlers/index.d.ts +1 -1
- package/dist/cjs/src/multer/multipart/handlers/multiple-files.d.ts +6 -4
- package/dist/cjs/src/multer/multipart/handlers/multiple-files.js +17 -11
- package/dist/cjs/src/multer/multipart/handlers/multiple-files.js.map +1 -1
- package/dist/cjs/src/multer/multipart/handlers/single-file.d.ts +6 -4
- package/dist/cjs/src/multer/multipart/handlers/single-file.js +6 -6
- package/dist/cjs/src/multer/multipart/handlers/single-file.js.map +1 -1
- package/dist/cjs/src/multer/multipart/index.d.ts +3 -3
- package/dist/cjs/src/multer/multipart/options.js.map +1 -1
- package/dist/cjs/src/multer/multipart/request.d.ts +8 -7
- package/dist/cjs/src/multer/multipart/request.js +6 -6
- package/dist/cjs/src/multer/multipart/request.js.map +1 -1
- package/dist/cjs/src/multer/storage/disk-storage.d.ts +2 -2
- package/dist/cjs/src/multer/storage/disk-storage.js +5 -5
- package/dist/cjs/src/multer/storage/disk-storage.js.map +1 -1
- package/dist/cjs/src/multer/storage/index.d.ts +3 -3
- package/dist/cjs/src/multer/storage/memory-storage.d.ts +4 -3
- package/dist/cjs/src/multer/storage/memory-storage.js +1 -1
- package/dist/cjs/src/multer/storage/memory-storage.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/build.d.ts +1 -0
- package/dist/esm/build.js +28 -0
- package/dist/esm/build.js.map +1 -0
- package/dist/esm/index.d.ts +4 -4
- package/dist/esm/index.js +4 -4
- package/dist/esm/src/adapters/hono-adapter.d.ts +22 -15
- package/dist/esm/src/adapters/hono-adapter.js +69 -67
- package/dist/esm/src/adapters/hono-adapter.js.map +1 -1
- package/dist/esm/src/adapters/index.d.ts +1 -1
- package/dist/esm/src/adapters/index.js +1 -1
- package/dist/esm/src/drivers/graphQLUpload/GraphQLUpload.d.ts +2 -2
- package/dist/esm/src/drivers/graphQLUpload/GraphQLUpload.js +7 -7
- package/dist/esm/src/drivers/graphQLUpload/GraphQLUpload.js.map +1 -1
- package/dist/esm/src/drivers/graphQLUpload/Upload.d.ts +1 -1
- package/dist/esm/src/drivers/graphQLUpload/fs-capacitor.d.ts +8 -8
- package/dist/esm/src/drivers/graphQLUpload/fs-capacitor.js +35 -35
- package/dist/esm/src/drivers/graphQLUpload/fs-capacitor.js.map +1 -1
- package/dist/esm/src/drivers/graphQLUpload/index.d.ts +4 -4
- package/dist/esm/src/drivers/graphQLUpload/index.js +4 -4
- package/dist/esm/src/drivers/graphQLUpload/processRequest.d.ts +2 -2
- package/dist/esm/src/drivers/graphQLUpload/processRequest.js +7 -7
- package/dist/esm/src/drivers/graphQLUpload/processRequest.js.map +1 -1
- package/dist/esm/src/drivers/graphql.driver.d.ts +4 -4
- package/dist/esm/src/drivers/graphql.driver.js +16 -16
- package/dist/esm/src/drivers/graphql.driver.js.map +1 -1
- package/dist/esm/src/drivers/index.d.ts +2 -2
- package/dist/esm/src/drivers/index.js +2 -2
- package/dist/esm/src/drivers/services/plugins-explorer.service.d.ts +1 -1
- package/dist/esm/src/drivers/services/plugins-explorer.service.js.map +1 -1
- package/dist/esm/src/interfaces/hono.interface.d.ts +1 -1
- package/dist/esm/src/interfaces/index.d.ts +2 -2
- package/dist/esm/src/interfaces/index.js +2 -2
- package/dist/esm/src/interfaces/nest-hono-application.interface.d.ts +4 -4
- package/dist/esm/src/multer/decorators/index.d.ts +2 -2
- package/dist/esm/src/multer/decorators/index.js +2 -2
- package/dist/esm/src/multer/decorators/uploaded-files-decorator.d.ts +1 -1
- package/dist/esm/src/multer/decorators/uploaded-files-decorator.js.map +1 -1
- package/dist/esm/src/multer/fs/index.js +7 -7
- package/dist/esm/src/multer/fs/index.js.map +1 -1
- package/dist/esm/src/multer/index.d.ts +4 -4
- package/dist/esm/src/multer/index.js +4 -4
- package/dist/esm/src/multer/interceptors/any-files-interceptor.d.ts +2 -2
- package/dist/esm/src/multer/interceptors/any-files-interceptor.js +6 -6
- package/dist/esm/src/multer/interceptors/any-files-interceptor.js.map +1 -1
- package/dist/esm/src/multer/interceptors/file-fields-interceptor.d.ts +3 -3
- package/dist/esm/src/multer/interceptors/file-fields-interceptor.js +6 -6
- package/dist/esm/src/multer/interceptors/file-fields-interceptor.js.map +1 -1
- package/dist/esm/src/multer/interceptors/file-interceptor.d.ts +2 -2
- package/dist/esm/src/multer/interceptors/file-interceptor.js +6 -6
- package/dist/esm/src/multer/interceptors/file-interceptor.js.map +1 -1
- package/dist/esm/src/multer/interceptors/files-interceptor.d.ts +2 -2
- package/dist/esm/src/multer/interceptors/files-interceptor.js +6 -6
- package/dist/esm/src/multer/interceptors/files-interceptor.js.map +1 -1
- package/dist/esm/src/multer/interceptors/index.d.ts +4 -4
- package/dist/esm/src/multer/interceptors/index.js +4 -4
- package/dist/esm/src/multer/multipart/exceptions.js.map +1 -1
- package/dist/esm/src/multer/multipart/file.d.ts +1 -1
- package/dist/esm/src/multer/multipart/file.js.map +1 -1
- package/dist/esm/src/multer/multipart/filter.d.ts +1 -1
- package/dist/esm/src/multer/multipart/handlers/any-files.d.ts +6 -4
- package/dist/esm/src/multer/multipart/handlers/any-files.js +3 -3
- package/dist/esm/src/multer/multipart/handlers/any-files.js.map +1 -1
- package/dist/esm/src/multer/multipart/handlers/file-fields.d.ts +9 -6
- package/dist/esm/src/multer/multipart/handlers/file-fields.js +11 -23
- package/dist/esm/src/multer/multipart/handlers/file-fields.js.map +1 -1
- package/dist/esm/src/multer/multipart/handlers/index.d.ts +1 -1
- package/dist/esm/src/multer/multipart/handlers/multiple-files.d.ts +6 -4
- package/dist/esm/src/multer/multipart/handlers/multiple-files.js +20 -14
- package/dist/esm/src/multer/multipart/handlers/multiple-files.js.map +1 -1
- package/dist/esm/src/multer/multipart/handlers/single-file.d.ts +6 -4
- package/dist/esm/src/multer/multipart/handlers/single-file.js +8 -8
- package/dist/esm/src/multer/multipart/handlers/single-file.js.map +1 -1
- package/dist/esm/src/multer/multipart/index.d.ts +3 -3
- package/dist/esm/src/multer/multipart/index.js +2 -2
- package/dist/esm/src/multer/multipart/options.js.map +1 -1
- package/dist/esm/src/multer/multipart/request.d.ts +8 -7
- package/dist/esm/src/multer/multipart/request.js +7 -7
- package/dist/esm/src/multer/multipart/request.js.map +1 -1
- package/dist/esm/src/multer/storage/disk-storage.d.ts +2 -2
- package/dist/esm/src/multer/storage/disk-storage.js +9 -9
- package/dist/esm/src/multer/storage/disk-storage.js.map +1 -1
- package/dist/esm/src/multer/storage/index.d.ts +3 -3
- package/dist/esm/src/multer/storage/index.js +3 -3
- package/dist/esm/src/multer/storage/memory-storage.d.ts +3 -3
- package/dist/esm/src/multer/storage/memory-storage.js +1 -1
- package/dist/esm/src/multer/storage/memory-storage.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/src/adapters/hono-adapter.d.ts +66 -0
- package/dist/src/adapters/hono-adapter.js +270 -0
- package/dist/src/adapters/hono-adapter.js.map +1 -0
- package/dist/src/adapters/index.d.ts +1 -0
- package/dist/src/adapters/index.js +2 -0
- package/dist/src/adapters/index.js.map +1 -0
- package/dist/src/drivers/constants/apollo.constants.d.ts +1 -0
- package/dist/src/drivers/constants/apollo.constants.js +2 -0
- package/dist/src/drivers/constants/apollo.constants.js.map +1 -0
- package/dist/src/drivers/constants/index.d.ts +1 -0
- package/dist/src/drivers/constants/index.js +2 -0
- package/dist/src/drivers/constants/index.js.map +1 -0
- package/dist/src/drivers/graphQLUpload/GraphQLUpload.d.ts +3 -0
- package/dist/src/drivers/graphQLUpload/GraphQLUpload.js +18 -0
- package/dist/src/drivers/graphQLUpload/GraphQLUpload.js.map +1 -0
- package/dist/src/drivers/graphQLUpload/Upload.d.ts +16 -0
- package/dist/src/drivers/graphQLUpload/Upload.js +17 -0
- package/dist/src/drivers/graphQLUpload/Upload.js.map +1 -0
- package/dist/src/drivers/graphQLUpload/fs-capacitor.d.ts +42 -0
- package/dist/src/drivers/graphQLUpload/fs-capacitor.js +185 -0
- package/dist/src/drivers/graphQLUpload/fs-capacitor.js.map +1 -0
- package/dist/src/drivers/graphQLUpload/index.d.ts +4 -0
- package/dist/src/drivers/graphQLUpload/index.js +5 -0
- package/dist/src/drivers/graphQLUpload/index.js.map +1 -0
- package/dist/src/drivers/graphQLUpload/processRequest.d.ts +2 -0
- package/dist/src/drivers/graphQLUpload/processRequest.js +47 -0
- package/dist/src/drivers/graphQLUpload/processRequest.js.map +1 -0
- package/dist/src/drivers/graphql.driver.d.ts +20 -0
- package/dist/src/drivers/graphql.driver.js +125 -0
- package/dist/src/drivers/graphql.driver.js.map +1 -0
- package/dist/src/drivers/index.d.ts +2 -0
- package/dist/src/drivers/index.js +3 -0
- package/dist/src/drivers/index.js.map +1 -0
- package/dist/src/drivers/services/plugins-explorer.service.d.ts +9 -0
- package/dist/src/drivers/services/plugins-explorer.service.js +22 -0
- package/dist/src/drivers/services/plugins-explorer.service.js.map +1 -0
- package/dist/src/interfaces/hono.interface.d.ts +4 -0
- package/dist/src/interfaces/hono.interface.js +2 -0
- package/dist/src/interfaces/hono.interface.js.map +1 -0
- package/dist/src/interfaces/index.d.ts +2 -0
- package/dist/src/interfaces/index.js +3 -0
- package/dist/src/interfaces/index.js.map +1 -0
- package/dist/src/interfaces/nest-hono-application.interface.d.ts +18 -0
- package/dist/src/interfaces/nest-hono-application.interface.js +2 -0
- package/dist/src/interfaces/nest-hono-application.interface.js.map +1 -0
- package/dist/src/multer/decorators/index.d.ts +2 -0
- package/dist/src/multer/decorators/index.js +3 -0
- package/dist/src/multer/decorators/index.js.map +1 -0
- package/dist/src/multer/decorators/uploaded-file-decorator.d.ts +1 -0
- package/dist/src/multer/decorators/uploaded-file-decorator.js +7 -0
- package/dist/src/multer/decorators/uploaded-file-decorator.js.map +1 -0
- package/dist/src/multer/decorators/uploaded-files-decorator.d.ts +1 -0
- package/dist/src/multer/decorators/uploaded-files-decorator.js +7 -0
- package/dist/src/multer/decorators/uploaded-files-decorator.js.map +1 -0
- package/dist/src/multer/fs/index.d.ts +2 -0
- package/dist/src/multer/fs/index.js +18 -0
- package/dist/src/multer/fs/index.js.map +1 -0
- package/dist/src/multer/index.d.ts +4 -0
- package/dist/src/multer/index.js +5 -0
- package/dist/src/multer/index.js.map +1 -0
- package/dist/src/multer/interceptors/any-files-interceptor.d.ts +3 -0
- package/dist/src/multer/interceptors/any-files-interceptor.js +27 -0
- package/dist/src/multer/interceptors/any-files-interceptor.js.map +1 -0
- package/dist/src/multer/interceptors/file-fields-interceptor.d.ts +4 -0
- package/dist/src/multer/interceptors/file-fields-interceptor.js +29 -0
- package/dist/src/multer/interceptors/file-fields-interceptor.js.map +1 -0
- package/dist/src/multer/interceptors/file-interceptor.d.ts +3 -0
- package/dist/src/multer/interceptors/file-interceptor.js +27 -0
- package/dist/src/multer/interceptors/file-interceptor.js.map +1 -0
- package/dist/src/multer/interceptors/files-interceptor.d.ts +3 -0
- package/dist/src/multer/interceptors/files-interceptor.js +27 -0
- package/dist/src/multer/interceptors/files-interceptor.js.map +1 -0
- package/dist/src/multer/interceptors/index.d.ts +4 -0
- package/dist/src/multer/interceptors/index.js +5 -0
- package/dist/src/multer/interceptors/index.js.map +1 -0
- package/dist/src/multer/multipart/exceptions.d.ts +1 -0
- package/dist/src/multer/multipart/exceptions.js +18 -0
- package/dist/src/multer/multipart/exceptions.js.map +1 -0
- package/dist/src/multer/multipart/file.d.ts +9 -0
- package/dist/src/multer/multipart/file.js +6 -0
- package/dist/src/multer/multipart/file.js.map +1 -0
- package/dist/src/multer/multipart/filter.d.ts +6 -0
- package/dist/src/multer/multipart/filter.js +18 -0
- package/dist/src/multer/multipart/filter.js.map +1 -0
- package/dist/src/multer/multipart/handlers/any-files.d.ts +10 -0
- package/dist/src/multer/multipart/handlers/any-files.js +29 -0
- package/dist/src/multer/multipart/handlers/any-files.js.map +1 -0
- package/dist/src/multer/multipart/handlers/file-fields.d.ts +17 -0
- package/dist/src/multer/multipart/handlers/file-fields.js +40 -0
- package/dist/src/multer/multipart/handlers/file-fields.js.map +1 -0
- package/dist/src/multer/multipart/handlers/index.d.ts +1 -0
- package/dist/src/multer/multipart/handlers/index.js +2 -0
- package/dist/src/multer/multipart/handlers/index.js.map +1 -0
- package/dist/src/multer/multipart/handlers/multiple-files.d.ts +10 -0
- package/dist/src/multer/multipart/handlers/multiple-files.js +36 -0
- package/dist/src/multer/multipart/handlers/multiple-files.js.map +1 -0
- package/dist/src/multer/multipart/handlers/single-file.d.ts +10 -0
- package/dist/src/multer/multipart/handlers/single-file.js +41 -0
- package/dist/src/multer/multipart/handlers/single-file.js.map +1 -0
- package/dist/src/multer/multipart/index.d.ts +3 -0
- package/dist/src/multer/multipart/index.js +3 -0
- package/dist/src/multer/multipart/index.js.map +1 -0
- package/dist/src/multer/multipart/options.d.ts +21 -0
- package/dist/src/multer/multipart/options.js +19 -0
- package/dist/src/multer/multipart/options.js.map +1 -0
- package/dist/src/multer/multipart/request.d.ts +15 -0
- package/dist/src/multer/multipart/request.js +17 -0
- package/dist/src/multer/multipart/request.js.map +1 -0
- package/dist/src/multer/storage/disk-storage.d.ts +31 -0
- package/dist/src/multer/storage/disk-storage.js +59 -0
- package/dist/src/multer/storage/disk-storage.js.map +1 -0
- package/dist/src/multer/storage/index.d.ts +3 -0
- package/dist/src/multer/storage/index.js +4 -0
- package/dist/src/multer/storage/index.js.map +1 -0
- package/dist/src/multer/storage/memory-storage.d.ts +19 -0
- package/dist/src/multer/storage/memory-storage.js +23 -0
- package/dist/src/multer/storage/memory-storage.js.map +1 -0
- package/dist/src/multer/storage/storage.d.ts +13 -0
- package/dist/src/multer/storage/storage.js +2 -0
- package/dist/src/multer/storage/storage.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/eslint.config.mjs +25 -0
- package/index.ts +4 -4
- package/package.json +20 -13
- package/src/adapters/hono-adapter.ts +113 -91
- package/src/adapters/index.ts +1 -1
- package/src/drivers/graphQLUpload/GraphQLUpload.ts +8 -7
- package/src/drivers/graphQLUpload/Upload.ts +1 -1
- package/src/drivers/graphQLUpload/fs-capacitor.ts +45 -45
- package/src/drivers/graphQLUpload/index.ts +4 -4
- package/src/drivers/graphQLUpload/processRequest.ts +11 -10
- package/src/drivers/graphql.driver.ts +24 -23
- package/src/drivers/index.ts +2 -2
- package/src/drivers/services/plugins-explorer.service.ts +2 -1
- package/src/interfaces/hono.interface.ts +1 -1
- package/src/interfaces/index.ts +2 -2
- package/src/interfaces/nest-hono-application.interface.ts +9 -9
- package/src/multer/decorators/index.ts +2 -2
- package/src/multer/decorators/uploaded-files-decorator.ts +1 -1
- package/src/multer/fs/index.ts +7 -11
- package/src/multer/index.ts +4 -4
- package/src/multer/interceptors/any-files-interceptor.ts +9 -12
- package/src/multer/interceptors/file-fields-interceptor.ts +9 -12
- package/src/multer/interceptors/file-interceptor.ts +9 -12
- package/src/multer/interceptors/files-interceptor.ts +9 -12
- package/src/multer/interceptors/index.ts +4 -4
- package/src/multer/multipart/exceptions.ts +1 -0
- package/src/multer/multipart/file.ts +2 -1
- package/src/multer/multipart/filter.ts +2 -2
- package/src/multer/multipart/handlers/any-files.ts +9 -7
- package/src/multer/multipart/handlers/file-fields.ts +47 -47
- package/src/multer/multipart/handlers/index.ts +1 -1
- package/src/multer/multipart/handlers/multiple-files.ts +37 -22
- package/src/multer/multipart/handlers/single-file.ts +26 -13
- package/src/multer/multipart/index.ts +3 -3
- package/src/multer/multipart/options.ts +1 -0
- package/src/multer/multipart/request.ts +33 -20
- package/src/multer/storage/disk-storage.ts +14 -14
- package/src/multer/storage/index.ts +3 -3
- package/src/multer/storage/memory-storage.ts +4 -3
- package/src/multer/storage/storage.ts +1 -0
- package/.yarn/install-state.gz +0 -0
- package/.yarnrc.yml +0 -1
- package/src/multer/crypto/index.ts +0 -4
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { finalize, Observable } from "rxjs";
|
|
2
1
|
import {
|
|
3
2
|
CallHandler,
|
|
4
3
|
ExecutionContext,
|
|
5
4
|
mixin,
|
|
6
5
|
NestInterceptor,
|
|
7
6
|
Type,
|
|
8
|
-
} from
|
|
7
|
+
} from '@nestjs/common';
|
|
8
|
+
import { finalize } from 'rxjs';
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
import { transformUploadOptions, UploadOptions } from
|
|
12
|
-
import {
|
|
10
|
+
import { handleMultipartSingleFile } from '../multipart/handlers/single-file';
|
|
11
|
+
import { transformUploadOptions, UploadOptions } from '../multipart/options';
|
|
12
|
+
import { getMultipartRequest } from '../multipart/request';
|
|
13
13
|
|
|
14
14
|
export function FileInterceptor(
|
|
15
15
|
fieldname: string,
|
|
16
|
-
options?: UploadOptions
|
|
16
|
+
options?: UploadOptions,
|
|
17
17
|
): Type<NestInterceptor> {
|
|
18
18
|
class MixinInterceptor implements NestInterceptor {
|
|
19
19
|
private readonly options: UploadOptions;
|
|
@@ -22,21 +22,18 @@ export function FileInterceptor(
|
|
|
22
22
|
this.options = transformUploadOptions(options);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
async intercept(
|
|
26
|
-
context: ExecutionContext,
|
|
27
|
-
next: CallHandler
|
|
28
|
-
): Promise<Observable<any>> {
|
|
25
|
+
async intercept(context: ExecutionContext, next: CallHandler) {
|
|
29
26
|
const ctx = context.switchToHttp();
|
|
30
27
|
const req = getMultipartRequest(ctx);
|
|
31
28
|
|
|
32
|
-
if (!req.header(
|
|
29
|
+
if (!req.header('content-type')?.startsWith('multipart/form-data')) {
|
|
33
30
|
return next.handle();
|
|
34
31
|
}
|
|
35
32
|
|
|
36
33
|
const { file, body, remove } = await handleMultipartSingleFile(
|
|
37
34
|
req,
|
|
38
35
|
fieldname,
|
|
39
|
-
this.options
|
|
36
|
+
this.options,
|
|
40
37
|
);
|
|
41
38
|
|
|
42
39
|
req.body = body;
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { finalize, Observable } from "rxjs";
|
|
2
1
|
import {
|
|
3
2
|
CallHandler,
|
|
4
3
|
ExecutionContext,
|
|
5
4
|
mixin,
|
|
6
5
|
NestInterceptor,
|
|
7
6
|
Type,
|
|
8
|
-
} from
|
|
7
|
+
} from '@nestjs/common';
|
|
8
|
+
import { finalize } from 'rxjs';
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
import { transformUploadOptions, UploadOptions } from
|
|
12
|
-
import {
|
|
10
|
+
import { handleMultipartMultipleFiles } from '../multipart/handlers/multiple-files';
|
|
11
|
+
import { transformUploadOptions, UploadOptions } from '../multipart/options';
|
|
12
|
+
import { getMultipartRequest } from '../multipart/request';
|
|
13
13
|
|
|
14
14
|
export function FilesInterceptor(
|
|
15
15
|
fieldname: string,
|
|
16
16
|
maxCount = 1,
|
|
17
|
-
options?: UploadOptions
|
|
17
|
+
options?: UploadOptions,
|
|
18
18
|
): Type<NestInterceptor> {
|
|
19
19
|
class MixinInterceptor implements NestInterceptor {
|
|
20
20
|
private readonly options: UploadOptions;
|
|
@@ -23,14 +23,11 @@ export function FilesInterceptor(
|
|
|
23
23
|
this.options = transformUploadOptions(options);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
async intercept(
|
|
27
|
-
context: ExecutionContext,
|
|
28
|
-
next: CallHandler
|
|
29
|
-
): Promise<Observable<any>> {
|
|
26
|
+
async intercept(context: ExecutionContext, next: CallHandler) {
|
|
30
27
|
const ctx = context.switchToHttp();
|
|
31
28
|
const req = getMultipartRequest(ctx);
|
|
32
29
|
|
|
33
|
-
if (!req.header(
|
|
30
|
+
if (!req.header('content-type')?.startsWith('multipart/form-data')) {
|
|
34
31
|
return next.handle();
|
|
35
32
|
}
|
|
36
33
|
|
|
@@ -38,7 +35,7 @@ export function FilesInterceptor(
|
|
|
38
35
|
req,
|
|
39
36
|
fieldname,
|
|
40
37
|
maxCount,
|
|
41
|
-
this.options
|
|
38
|
+
this.options,
|
|
42
39
|
);
|
|
43
40
|
|
|
44
41
|
req.body = body;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
1
|
+
export * from './file-fields-interceptor';
|
|
2
|
+
export * from './file-interceptor';
|
|
3
|
+
export * from './any-files-interceptor';
|
|
4
|
+
export * from './files-interceptor';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { BadRequestException } from '@nestjs/common';
|
|
2
|
-
import {
|
|
2
|
+
import { HonoRequest } from 'hono';
|
|
3
3
|
|
|
4
|
+
import { UploadOptions } from '.';
|
|
4
5
|
import { DiskStorageFile, MemoryStorageFile, StorageFile } from '../storage';
|
|
5
|
-
import { HonoRequest } from 'hono';
|
|
6
6
|
|
|
7
7
|
export type UploadFilterFile =
|
|
8
8
|
| DiskStorageFile
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import { removeStorageFiles } from
|
|
5
|
-
import { filterUpload } from
|
|
1
|
+
import { BodyData } from 'hono/utils/body';
|
|
2
|
+
|
|
3
|
+
import { StorageFile } from '../../storage';
|
|
4
|
+
import { removeStorageFiles } from '../file';
|
|
5
|
+
import { filterUpload } from '../filter';
|
|
6
|
+
import { UploadOptions } from '../options';
|
|
7
|
+
import { THonoRequest, getParts } from '../request';
|
|
6
8
|
|
|
7
9
|
export const handleMultipartAnyFiles = async (
|
|
8
10
|
req: THonoRequest,
|
|
9
|
-
options: UploadOptions
|
|
11
|
+
options: UploadOptions,
|
|
10
12
|
) => {
|
|
11
13
|
const parts = getParts(req, options);
|
|
12
14
|
|
|
13
|
-
const body:
|
|
15
|
+
const body: BodyData = {};
|
|
14
16
|
|
|
15
17
|
const files: StorageFile[] = [];
|
|
16
18
|
|
|
@@ -1,48 +1,57 @@
|
|
|
1
|
-
import { BadRequestException } from
|
|
1
|
+
import { BadRequestException } from '@nestjs/common';
|
|
2
|
+
import { BodyData } from 'hono/utils/body';
|
|
2
3
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { HonoRequest } from "hono";
|
|
4
|
+
import { StorageFile } from '../../storage/storage';
|
|
5
|
+
import { removeStorageFiles } from '../file';
|
|
6
|
+
import { filterUpload } from '../filter';
|
|
7
|
+
import { UploadOptions } from '../options';
|
|
8
|
+
import { THonoRequest, getParts } from '../request';
|
|
9
9
|
|
|
10
10
|
export interface UploadField {
|
|
11
|
-
/**
|
|
12
|
-
* Field name
|
|
13
|
-
*/
|
|
14
11
|
name: string;
|
|
15
|
-
/**
|
|
16
|
-
* Max number of files in this field
|
|
17
|
-
*/
|
|
18
12
|
maxCount?: number;
|
|
19
13
|
}
|
|
20
14
|
|
|
21
|
-
export type UploadFieldMapEntry = Required<Pick<UploadField,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
15
|
+
export type UploadFieldMapEntry = Required<Pick<UploadField, 'maxCount'>>;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Converts an array of upload fields into a map for easy lookup.
|
|
19
|
+
* @param {UploadField[]} uploadFields - Array of upload field definitions.
|
|
20
|
+
* @returns {Map<string, UploadFieldMapEntry>} A map of field names to their max count settings.
|
|
21
|
+
*/
|
|
22
|
+
export const uploadFieldsToMap = (uploadFields: UploadField[]) =>
|
|
23
|
+
new Map(
|
|
24
|
+
uploadFields.map(({ name, ...opts }) => [name, { maxCount: 1, ...opts }]),
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Handles multipart file fields by processing form-data parts.
|
|
29
|
+
* @param {THonoRequest} req - The incoming request object.
|
|
30
|
+
* @param {Map<string, UploadFieldMapEntry>} fieldsMap - A map of allowed upload fields.
|
|
31
|
+
* @param {UploadOptions} options - Upload options including storage handler.
|
|
32
|
+
* @returns {Promise<{ body: BodyData, files: Record<string, StorageFile[]>, remove: () => Promise<void> }>} The parsed body and files with a removal function.
|
|
33
|
+
*/
|
|
33
34
|
export const handleMultipartFileFields = async (
|
|
34
35
|
req: THonoRequest,
|
|
35
36
|
fieldsMap: Map<string, UploadFieldMapEntry>,
|
|
36
|
-
options: UploadOptions
|
|
37
|
-
)
|
|
37
|
+
options: UploadOptions,
|
|
38
|
+
): Promise<{
|
|
39
|
+
body: BodyData;
|
|
40
|
+
files: Record<string, StorageFile[]>;
|
|
41
|
+
remove: () => Promise<void>;
|
|
42
|
+
}> => {
|
|
38
43
|
const parts = getParts(req, options);
|
|
39
|
-
const body:
|
|
40
|
-
|
|
44
|
+
const body: BodyData = {};
|
|
41
45
|
const files: Record<string, StorageFile[]> = {};
|
|
42
46
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Removes stored files in case of an error or cleanup.
|
|
49
|
+
* @param {boolean} [error=false] - Whether the removal is due to an error.
|
|
50
|
+
* @returns {Promise<void>} Resolves after files are removed.
|
|
51
|
+
*/
|
|
52
|
+
const removeFiles = async (error?: boolean): Promise<void> => {
|
|
53
|
+
const allFiles = Object.values(files).flat();
|
|
54
|
+
return removeStorageFiles(options.storage!, allFiles, error);
|
|
46
55
|
};
|
|
47
56
|
|
|
48
57
|
try {
|
|
@@ -53,25 +62,20 @@ export const handleMultipartFileFields = async (
|
|
|
53
62
|
}
|
|
54
63
|
|
|
55
64
|
const fieldOptions = fieldsMap.get(fieldName);
|
|
56
|
-
|
|
57
|
-
if (fieldOptions == null) {
|
|
65
|
+
if (!fieldOptions) {
|
|
58
66
|
throw new BadRequestException(
|
|
59
|
-
`Field ${fieldName} doesn't accept files
|
|
67
|
+
`Field ${fieldName} doesn't accept files`,
|
|
60
68
|
);
|
|
61
69
|
}
|
|
62
70
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (files[fieldName].length + 1 > fieldOptions.maxCount) {
|
|
71
|
+
files[fieldName] = files[fieldName] || [];
|
|
72
|
+
if (files[fieldName].length >= fieldOptions.maxCount) {
|
|
68
73
|
throw new BadRequestException(
|
|
69
|
-
`Field ${fieldName} accepts max ${fieldOptions.maxCount} files
|
|
74
|
+
`Field ${fieldName} accepts max ${fieldOptions.maxCount} files`,
|
|
70
75
|
);
|
|
71
76
|
}
|
|
72
77
|
|
|
73
78
|
const file = await options.storage!.handleFile(part, req, fieldName);
|
|
74
|
-
|
|
75
79
|
if (await filterUpload(options, req, file)) {
|
|
76
80
|
files[fieldName].push(file);
|
|
77
81
|
}
|
|
@@ -81,9 +85,5 @@ export const handleMultipartFileFields = async (
|
|
|
81
85
|
throw error;
|
|
82
86
|
}
|
|
83
87
|
|
|
84
|
-
return {
|
|
85
|
-
body,
|
|
86
|
-
files,
|
|
87
|
-
remove: () => removeFiles(),
|
|
88
|
-
};
|
|
88
|
+
return { body, files, remove: removeFiles };
|
|
89
89
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { UploadField } from
|
|
1
|
+
export { UploadField } from './file-fields';
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
import { BadRequestException } from
|
|
1
|
+
import { BadRequestException } from '@nestjs/common';
|
|
2
|
+
import { BodyData } from 'hono/utils/body';
|
|
2
3
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
4
|
+
import { StorageFile } from '../../storage';
|
|
5
|
+
import { removeStorageFiles } from '../file';
|
|
6
|
+
import { filterUpload } from '../filter';
|
|
7
|
+
import { UploadOptions } from '../options';
|
|
8
|
+
import { THonoRequest, getParts } from '../request';
|
|
8
9
|
|
|
9
10
|
export const handleMultipartMultipleFiles = async (
|
|
10
11
|
req: THonoRequest,
|
|
11
12
|
fieldname: string,
|
|
12
13
|
maxCount: number,
|
|
13
|
-
options: UploadOptions
|
|
14
|
+
options: UploadOptions,
|
|
14
15
|
) => {
|
|
15
16
|
const parts = getParts(req, options);
|
|
16
|
-
const body:
|
|
17
|
+
const body: BodyData = {};
|
|
17
18
|
|
|
18
19
|
const files: StorageFile[] = [];
|
|
19
20
|
|
|
@@ -23,27 +24,41 @@ export const handleMultipartMultipleFiles = async (
|
|
|
23
24
|
|
|
24
25
|
try {
|
|
25
26
|
for await (const [partFieldName, part] of Object.entries(parts)) {
|
|
26
|
-
if (!(part instanceof File)) {
|
|
27
|
+
if (!(part instanceof File || Array.isArray(part))) {
|
|
27
28
|
body[partFieldName] = part;
|
|
28
29
|
continue;
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
throw new BadRequestException(
|
|
33
|
-
`Field ${partFieldName} doesn't accept files`
|
|
34
|
-
);
|
|
35
|
-
}
|
|
32
|
+
const partArray = Array.isArray(part) ? part : [part];
|
|
36
33
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
34
|
+
for (const singlePart of partArray) {
|
|
35
|
+
if (!(singlePart instanceof File)) {
|
|
36
|
+
throw new BadRequestException(
|
|
37
|
+
`Field ${partFieldName} contains invalid file data`,
|
|
38
|
+
);
|
|
39
|
+
}
|
|
42
40
|
|
|
43
|
-
|
|
41
|
+
if (partFieldName !== fieldname) {
|
|
42
|
+
throw new BadRequestException(
|
|
43
|
+
`Field ${partFieldName} doesn't accept files`,
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (files.length >= maxCount) {
|
|
48
|
+
throw new BadRequestException(
|
|
49
|
+
`Field ${partFieldName} accepts max ${maxCount} files`,
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const file = await options.storage!.handleFile(
|
|
54
|
+
singlePart,
|
|
55
|
+
req,
|
|
56
|
+
partFieldName,
|
|
57
|
+
);
|
|
44
58
|
|
|
45
|
-
|
|
46
|
-
|
|
59
|
+
if (await filterUpload(options, req, file)) {
|
|
60
|
+
files.push(file);
|
|
61
|
+
}
|
|
47
62
|
}
|
|
48
63
|
}
|
|
49
64
|
} catch (error) {
|
|
@@ -1,22 +1,33 @@
|
|
|
1
|
-
import { BadRequestException } from
|
|
1
|
+
import { BadRequestException } from '@nestjs/common';
|
|
2
|
+
import { BodyData } from 'hono/utils/body';
|
|
2
3
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { StorageFile } from '../../storage';
|
|
5
|
+
import { filterUpload } from '../filter';
|
|
6
|
+
import { UploadOptions } from '../options';
|
|
7
|
+
import { THonoRequest, getParts } from '../request';
|
|
7
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Handles a single file upload in a multipart request.
|
|
11
|
+
* @param req - The request object.
|
|
12
|
+
* @param fieldname - The name of the field that should contain the file.
|
|
13
|
+
* @param options - Upload options with storage configurations.
|
|
14
|
+
* @returns An object containing the request body, uploaded file, and a remove function.
|
|
15
|
+
*/
|
|
8
16
|
export const handleMultipartSingleFile = async (
|
|
9
17
|
req: THonoRequest,
|
|
10
18
|
fieldname: string,
|
|
11
|
-
options: UploadOptions
|
|
19
|
+
options: UploadOptions,
|
|
12
20
|
) => {
|
|
13
21
|
const parts = getParts(req, options);
|
|
14
|
-
const body:
|
|
15
|
-
|
|
16
|
-
let file: StorageFile | undefined = undefined;
|
|
22
|
+
const body: BodyData = {};
|
|
23
|
+
let file: StorageFile | undefined;
|
|
17
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Removes uploaded file in case of an error or cleanup.
|
|
27
|
+
* @param error - Whether the removal is due to an error.
|
|
28
|
+
*/
|
|
18
29
|
const removeFiles = async (error?: boolean) => {
|
|
19
|
-
if (file
|
|
30
|
+
if (!file) return;
|
|
20
31
|
await options.storage!.removeFile(file, error);
|
|
21
32
|
};
|
|
22
33
|
|
|
@@ -29,11 +40,13 @@ export const handleMultipartSingleFile = async (
|
|
|
29
40
|
|
|
30
41
|
if (partFieldName !== fieldname) {
|
|
31
42
|
throw new BadRequestException(
|
|
32
|
-
`Field ${partFieldName} doesn't accept file
|
|
43
|
+
`Field "${partFieldName}" doesn't accept file.`,
|
|
33
44
|
);
|
|
34
|
-
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (file) {
|
|
35
48
|
throw new BadRequestException(
|
|
36
|
-
`Field ${fieldname} accepts only one file
|
|
49
|
+
`Field "${fieldname}" accepts only one file.`,
|
|
37
50
|
);
|
|
38
51
|
}
|
|
39
52
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export { UploadFilterFile, UploadFilterHandler } from
|
|
1
|
+
export * from './options';
|
|
2
|
+
export * from './filter';
|
|
3
|
+
export { UploadFilterFile, UploadFilterHandler } from './filter';
|
|
@@ -1,36 +1,49 @@
|
|
|
1
|
-
import { BadRequestException } from
|
|
2
|
-
import { HttpArgumentsHost } from
|
|
1
|
+
import { BadRequestException } from '@nestjs/common';
|
|
2
|
+
import { HttpArgumentsHost } from '@nestjs/common/interfaces';
|
|
3
|
+
import { HonoRequest } from 'hono';
|
|
4
|
+
import { BodyData } from 'hono/utils/body';
|
|
3
5
|
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { HonoRequest } from "hono";
|
|
6
|
+
import { StorageFile } from '../storage';
|
|
7
|
+
import { MultipartFile } from './file';
|
|
8
|
+
import { UploadOptions } from './options';
|
|
8
9
|
|
|
9
10
|
export type THonoRequest = HonoRequest & {
|
|
10
11
|
files: Record<string, File[]>;
|
|
11
|
-
body:
|
|
12
|
+
body: BodyData;
|
|
12
13
|
storageFile?: StorageFile;
|
|
13
14
|
storageFiles?: StorageFile[] | Record<string, StorageFile[]>;
|
|
14
15
|
};
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Retrieves the multipart request from the given context.
|
|
19
|
+
* @param ctx - The HTTP arguments host.
|
|
20
|
+
* @returns The request object extended with THonoRequest.
|
|
21
|
+
*/
|
|
22
|
+
export const getMultipartRequest = (ctx: HttpArgumentsHost): THonoRequest => {
|
|
23
|
+
return ctx.getRequest<THonoRequest>();
|
|
20
24
|
};
|
|
21
25
|
|
|
22
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Validates and extracts file parts from the request body.
|
|
28
|
+
* @param req - The request object containing multipart data.
|
|
29
|
+
* @param options - Upload options with file size limits.
|
|
30
|
+
* @returns The request body containing validated file parts.
|
|
31
|
+
* @throws {BadRequestException} If any file exceeds the allowed size limit.
|
|
32
|
+
*/
|
|
33
|
+
export const getParts = (
|
|
34
|
+
req: THonoRequest,
|
|
35
|
+
options: UploadOptions,
|
|
36
|
+
): BodyData => {
|
|
23
37
|
const parts = req.body;
|
|
24
38
|
|
|
25
39
|
for (const [key, file] of Object.entries(parts)) {
|
|
26
|
-
if (
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
);
|
|
40
|
+
if (file instanceof File) {
|
|
41
|
+
const maxSize = options?.limits?.fileSize;
|
|
42
|
+
if (maxSize && file.size > maxSize) {
|
|
43
|
+
throw new BadRequestException(
|
|
44
|
+
`File "${key}" is too large. Maximum size is ${maxSize} bytes.`,
|
|
45
|
+
);
|
|
46
|
+
}
|
|
34
47
|
}
|
|
35
48
|
}
|
|
36
49
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { createWriteStream } from 'fs';
|
|
2
|
+
import { mkdir, unlink } from 'fs/promises';
|
|
3
|
+
import { HonoRequest } from 'hono';
|
|
4
|
+
import { Readable } from 'node:stream';
|
|
5
|
+
import { pipeline } from 'node:stream/promises';
|
|
6
|
+
import { tmpdir } from 'os';
|
|
7
|
+
import { join } from 'path';
|
|
5
8
|
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { pipeline } from "node:stream/promises";
|
|
9
|
-
import { HonoRequest } from "hono";
|
|
10
|
-
import { Readable } from "node:stream";
|
|
9
|
+
import { getUniqueFilename, pathExists } from '../fs';
|
|
10
|
+
import { StorageFile, Storage } from './storage';
|
|
11
11
|
|
|
12
12
|
export interface DiskStorageFile extends StorageFile {
|
|
13
13
|
dest: string;
|
|
@@ -28,9 +28,9 @@ export interface DiskStorageOptions {
|
|
|
28
28
|
const excecuteStorageHandler = (
|
|
29
29
|
file: File,
|
|
30
30
|
req: HonoRequest,
|
|
31
|
-
obj?: DiskStorageOptionHandler
|
|
31
|
+
obj?: DiskStorageOptionHandler,
|
|
32
32
|
) => {
|
|
33
|
-
if (typeof obj ===
|
|
33
|
+
if (typeof obj === 'function') {
|
|
34
34
|
return obj(file, req);
|
|
35
35
|
}
|
|
36
36
|
|
|
@@ -76,7 +76,7 @@ export class DiskStorage
|
|
|
76
76
|
originalFilename: file.name,
|
|
77
77
|
path,
|
|
78
78
|
mimetype: file.type,
|
|
79
|
-
encoding:
|
|
79
|
+
encoding: 'utf-8',
|
|
80
80
|
fieldname: fieldName,
|
|
81
81
|
};
|
|
82
82
|
}
|
|
@@ -90,7 +90,7 @@ export class DiskStorage
|
|
|
90
90
|
protected async getFilename(
|
|
91
91
|
file: File,
|
|
92
92
|
req: HonoRequest,
|
|
93
|
-
obj?: DiskStorageOptionHandler
|
|
93
|
+
obj?: DiskStorageOptionHandler,
|
|
94
94
|
): Promise<string> {
|
|
95
95
|
return (
|
|
96
96
|
excecuteStorageHandler(file, req, obj) ?? getUniqueFilename(file.name)
|
|
@@ -100,7 +100,7 @@ export class DiskStorage
|
|
|
100
100
|
protected async getFileDestination(
|
|
101
101
|
file: File,
|
|
102
102
|
req: HonoRequest,
|
|
103
|
-
obj?: DiskStorageOptionHandler
|
|
103
|
+
obj?: DiskStorageOptionHandler,
|
|
104
104
|
): Promise<string> {
|
|
105
105
|
return excecuteStorageHandler(file, req, obj) ?? tmpdir();
|
|
106
106
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
1
|
+
export * from './disk-storage';
|
|
2
|
+
export * from './memory-storage';
|
|
3
|
+
export * from './storage';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { HonoRequest } from 'hono';
|
|
2
|
+
|
|
3
|
+
import { StorageFile, Storage } from './storage';
|
|
3
4
|
|
|
4
5
|
export interface MemoryStorageFile extends StorageFile {
|
|
5
6
|
buffer: Buffer;
|
|
@@ -17,7 +18,7 @@ export class MemoryStorage implements Storage<MemoryStorageFile> {
|
|
|
17
18
|
return {
|
|
18
19
|
buffer,
|
|
19
20
|
size: buffer.length,
|
|
20
|
-
encoding:
|
|
21
|
+
encoding: 'utf-8',
|
|
21
22
|
mimetype: file.type,
|
|
22
23
|
fieldname: fieldName,
|
|
23
24
|
originalFilename: file.name,
|
|
@@ -8,6 +8,7 @@ export interface StorageFile {
|
|
|
8
8
|
originalFilename: string;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
11
12
|
export interface Storage<T extends StorageFile = StorageFile, K = any> {
|
|
12
13
|
handleFile: (file: File, req: HonoRequest, fieldName: string) => Promise<T>;
|
|
13
14
|
removeFile: (file: T, force?: boolean) => Promise<void> | void;
|
package/.yarn/install-state.gz
DELETED
|
Binary file
|
package/.yarnrc.yml
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
nodeLinker: node-modules
|