@kiyasov/platform-hono 1.4.0 → 1.4.2
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 +5 -5
- 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 +5 -5
- 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 +5 -5
- 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 +5 -5
- 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 +1 -1
- 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 +7 -7
- 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 +7 -7
- 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 +7 -7
- 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 +7 -7
- 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 +4 -4
- 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 +10 -13
- package/src/multer/interceptors/file-fields-interceptor.ts +10 -13
- package/src/multer/interceptors/file-interceptor.ts +10 -13
- package/src/multer/interceptors/files-interceptor.ts +10 -13
- 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 +11 -10
- 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,16 +1,16 @@
|
|
|
1
|
-
import { randomBytes } from
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { randomBytes } from 'crypto';
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { read, open, closeSync, unlinkSync, write, close, unlink } from 'fs';
|
|
4
|
+
import { tmpdir } from 'os';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
import { Readable, ReadableOptions, Writable, WritableOptions } from 'stream';
|
|
7
7
|
|
|
8
8
|
export class ReadAfterDestroyedError extends Error {}
|
|
9
9
|
export class ReadAfterReleasedError extends Error {}
|
|
10
10
|
|
|
11
11
|
export interface ReadStreamOptions {
|
|
12
|
-
highWaterMark?: ReadableOptions[
|
|
13
|
-
encoding?: ReadableOptions[
|
|
12
|
+
highWaterMark?: ReadableOptions['highWaterMark'];
|
|
13
|
+
encoding?: ReadableOptions['encoding'];
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
// Use a “proxy” event emitter configured to have an infinite maximum number of
|
|
@@ -19,7 +19,7 @@ export interface ReadStreamOptions {
|
|
|
19
19
|
// https://github.com/mike-marcacci/fs-capacitor/issues/30
|
|
20
20
|
const processExitProxy = new EventEmitter();
|
|
21
21
|
processExitProxy.setMaxListeners(Infinity);
|
|
22
|
-
process.once(
|
|
22
|
+
process.once('exit', () => processExitProxy.emit('exit'));
|
|
23
23
|
|
|
24
24
|
export class ReadStream extends Readable {
|
|
25
25
|
private _pos: number = 0;
|
|
@@ -37,8 +37,8 @@ export class ReadStream extends Readable {
|
|
|
37
37
|
_read(n: number): void {
|
|
38
38
|
if (this.destroyed) return;
|
|
39
39
|
|
|
40
|
-
if (typeof this._writeStream[
|
|
41
|
-
this._writeStream.once(
|
|
40
|
+
if (typeof this._writeStream['_fd'] !== 'number') {
|
|
41
|
+
this._writeStream.once('ready', () => this._read(n));
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -46,7 +46,7 @@ export class ReadStream extends Readable {
|
|
|
46
46
|
// `bytesRead`, and discard the rest. This prevents node from having to zero
|
|
47
47
|
// out the entire allocation first.
|
|
48
48
|
const buf = new Uint8Array(Buffer.allocUnsafe(n).buffer);
|
|
49
|
-
read(this._writeStream[
|
|
49
|
+
read(this._writeStream['_fd'], buf, 0, n, this._pos, (error, bytesRead) => {
|
|
50
50
|
if (error) this.destroy(error);
|
|
51
51
|
|
|
52
52
|
// Push any read bytes into the local stream buffer.
|
|
@@ -60,14 +60,14 @@ export class ReadStream extends Readable {
|
|
|
60
60
|
// then this stream has reached the end.
|
|
61
61
|
if (
|
|
62
62
|
(
|
|
63
|
-
this._writeStream as
|
|
63
|
+
this._writeStream as unknown as {
|
|
64
64
|
_writableState: { finished: boolean };
|
|
65
65
|
}
|
|
66
66
|
)._writableState.finished
|
|
67
67
|
) {
|
|
68
68
|
// Check if we have consumed the whole file up to where
|
|
69
69
|
// the write stream has written before ending the stream
|
|
70
|
-
if (this._pos < (this._writeStream as
|
|
70
|
+
if (this._pos < (this._writeStream as unknown as { _pos: number })._pos)
|
|
71
71
|
this._read(n);
|
|
72
72
|
else this.push(null);
|
|
73
73
|
return;
|
|
@@ -75,20 +75,20 @@ export class ReadStream extends Readable {
|
|
|
75
75
|
|
|
76
76
|
// Otherwise, wait for the write stream to add more data or finish.
|
|
77
77
|
const retry = (): void => {
|
|
78
|
-
this._writeStream.off(
|
|
79
|
-
this._writeStream.off(
|
|
78
|
+
this._writeStream.off('finish', retry);
|
|
79
|
+
this._writeStream.off('write', retry);
|
|
80
80
|
this._read(n);
|
|
81
81
|
};
|
|
82
82
|
|
|
83
|
-
this._writeStream.on(
|
|
84
|
-
this._writeStream.on(
|
|
83
|
+
this._writeStream.on('finish', retry);
|
|
84
|
+
this._writeStream.on('write', retry);
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
export interface WriteStreamOptions {
|
|
90
|
-
highWaterMark?: WritableOptions[
|
|
91
|
-
defaultEncoding?: WritableOptions[
|
|
90
|
+
highWaterMark?: WritableOptions['highWaterMark'];
|
|
91
|
+
defaultEncoding?: WritableOptions['defaultEncoding'];
|
|
92
92
|
tmpdir?: () => string;
|
|
93
93
|
}
|
|
94
94
|
|
|
@@ -115,21 +115,21 @@ export class WriteStream extends Writable {
|
|
|
115
115
|
|
|
116
116
|
this._path = join(
|
|
117
117
|
(options?.tmpdir ?? tmpdir)(),
|
|
118
|
-
`capacitor-${buffer.toString(
|
|
118
|
+
`capacitor-${buffer.toString('hex')}.tmp`,
|
|
119
119
|
);
|
|
120
120
|
|
|
121
121
|
// Create a file in the OS's temporary files directory.
|
|
122
|
-
open(this._path,
|
|
122
|
+
open(this._path, 'wx+', 0o600, (error, fd) => {
|
|
123
123
|
if (error) {
|
|
124
124
|
this.destroy(error);
|
|
125
125
|
return;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
// Cleanup when the process exits or is killed.
|
|
129
|
-
processExitProxy.once(
|
|
129
|
+
processExitProxy.once('exit', this._cleanupSync);
|
|
130
130
|
|
|
131
131
|
this._fd = fd;
|
|
132
|
-
this.emit(
|
|
132
|
+
this.emit('ready');
|
|
133
133
|
});
|
|
134
134
|
});
|
|
135
135
|
}
|
|
@@ -138,7 +138,7 @@ export class WriteStream extends Writable {
|
|
|
138
138
|
const fd = this._fd;
|
|
139
139
|
const path = this._path;
|
|
140
140
|
|
|
141
|
-
if (typeof fd !==
|
|
141
|
+
if (typeof fd !== 'number' || typeof path !== 'string') {
|
|
142
142
|
callback(null);
|
|
143
143
|
return;
|
|
144
144
|
}
|
|
@@ -154,19 +154,19 @@ export class WriteStream extends Writable {
|
|
|
154
154
|
|
|
155
155
|
// We avoid removing this until now in case an exit occurs while
|
|
156
156
|
// asyncronously cleaning up.
|
|
157
|
-
processExitProxy.off(
|
|
157
|
+
processExitProxy.off('exit', this._cleanupSync);
|
|
158
158
|
callback(unlinkError ?? closeError);
|
|
159
159
|
});
|
|
160
160
|
});
|
|
161
161
|
};
|
|
162
162
|
|
|
163
163
|
_cleanupSync = (): void => {
|
|
164
|
-
processExitProxy.off(
|
|
164
|
+
processExitProxy.off('exit', this._cleanupSync);
|
|
165
165
|
|
|
166
|
-
if (typeof this._fd ===
|
|
166
|
+
if (typeof this._fd === 'number')
|
|
167
167
|
try {
|
|
168
168
|
closeSync(this._fd);
|
|
169
|
-
} catch
|
|
169
|
+
} catch {
|
|
170
170
|
// An error here probably means the fd was already closed, but we can
|
|
171
171
|
// still try to unlink the file.
|
|
172
172
|
}
|
|
@@ -175,15 +175,15 @@ export class WriteStream extends Writable {
|
|
|
175
175
|
if (this._path !== null) {
|
|
176
176
|
unlinkSync(this._path);
|
|
177
177
|
}
|
|
178
|
-
} catch
|
|
178
|
+
} catch {
|
|
179
179
|
// If we are unable to unlink the file, the operating system will clean
|
|
180
180
|
// up on next restart, since we use store thes in `os.tmpdir()`
|
|
181
181
|
}
|
|
182
182
|
};
|
|
183
183
|
|
|
184
|
-
_final(callback: (error?: null | Error) =>
|
|
185
|
-
if (typeof this._fd !==
|
|
186
|
-
this.once(
|
|
184
|
+
_final(callback: (error?: null | Error) => unknown): void {
|
|
185
|
+
if (typeof this._fd !== 'number') {
|
|
186
|
+
this.once('ready', () => this._final(callback));
|
|
187
187
|
return;
|
|
188
188
|
}
|
|
189
189
|
callback();
|
|
@@ -192,17 +192,17 @@ export class WriteStream extends Writable {
|
|
|
192
192
|
_write(
|
|
193
193
|
chunk: Buffer,
|
|
194
194
|
encoding: string,
|
|
195
|
-
callback: (error?: null | Error) =>
|
|
195
|
+
callback: (error?: null | Error) => unknown,
|
|
196
196
|
): void {
|
|
197
|
-
if (typeof this._fd !==
|
|
198
|
-
this.once(
|
|
197
|
+
if (typeof this._fd !== 'number') {
|
|
198
|
+
this.once('ready', () => this._write(chunk, encoding, callback));
|
|
199
199
|
return;
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
const uint8Array = new Uint8Array(
|
|
203
203
|
chunk.buffer,
|
|
204
204
|
chunk.byteOffset,
|
|
205
|
-
chunk.byteLength
|
|
205
|
+
chunk.byteLength,
|
|
206
206
|
);
|
|
207
207
|
|
|
208
208
|
write(this._fd, uint8Array, 0, chunk.length, this._pos, (error) => {
|
|
@@ -219,7 +219,7 @@ export class WriteStream extends Writable {
|
|
|
219
219
|
// the out-of-order writes would still open the potential for read streams
|
|
220
220
|
// to scan positions that have not yet been written.
|
|
221
221
|
this._pos += chunk.length;
|
|
222
|
-
this.emit(
|
|
222
|
+
this.emit('write');
|
|
223
223
|
callback();
|
|
224
224
|
});
|
|
225
225
|
}
|
|
@@ -231,7 +231,7 @@ export class WriteStream extends Writable {
|
|
|
231
231
|
|
|
232
232
|
_destroy(
|
|
233
233
|
error: undefined | null | Error,
|
|
234
|
-
callback: (error?: null | Error) =>
|
|
234
|
+
callback: (error?: null | Error) => unknown,
|
|
235
235
|
): void {
|
|
236
236
|
// Destroy all attached read streams.
|
|
237
237
|
for (const readStream of this._readStreams) {
|
|
@@ -239,17 +239,17 @@ export class WriteStream extends Writable {
|
|
|
239
239
|
}
|
|
240
240
|
|
|
241
241
|
// This capacitor is fully initialized.
|
|
242
|
-
if (typeof this._fd ===
|
|
242
|
+
if (typeof this._fd === 'number' && typeof this._path === 'string') {
|
|
243
243
|
this._cleanup((cleanupError) => callback(cleanupError ?? error));
|
|
244
244
|
return;
|
|
245
245
|
}
|
|
246
246
|
|
|
247
247
|
// This capacitor has not yet finished initialization; if initialization
|
|
248
248
|
// does complete, immediately clean up after.
|
|
249
|
-
this.once(
|
|
249
|
+
this.once('ready', () => {
|
|
250
250
|
this._cleanup((cleanupError) => {
|
|
251
251
|
if (cleanupError) {
|
|
252
|
-
this.emit(
|
|
252
|
+
this.emit('error', cleanupError);
|
|
253
253
|
}
|
|
254
254
|
});
|
|
255
255
|
});
|
|
@@ -260,18 +260,18 @@ export class WriteStream extends Writable {
|
|
|
260
260
|
createReadStream(options?: ReadStreamOptions): ReadStream {
|
|
261
261
|
if (this.destroyed)
|
|
262
262
|
throw new ReadAfterDestroyedError(
|
|
263
|
-
|
|
263
|
+
'A ReadStream cannot be created from a destroyed WriteStream.',
|
|
264
264
|
);
|
|
265
265
|
|
|
266
266
|
if (this._released)
|
|
267
267
|
throw new ReadAfterReleasedError(
|
|
268
|
-
|
|
268
|
+
'A ReadStream cannot be created from a released WriteStream.',
|
|
269
269
|
);
|
|
270
270
|
|
|
271
271
|
const readStream = new ReadStream(this, options);
|
|
272
272
|
this._readStreams.add(readStream);
|
|
273
273
|
|
|
274
|
-
readStream.once(
|
|
274
|
+
readStream.once('close', (): void => {
|
|
275
275
|
this._readStreams.delete(readStream);
|
|
276
276
|
|
|
277
277
|
if (this._released && this._readStreams.size === 0) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
1
|
+
export * from './fs-capacitor';
|
|
2
|
+
export * from './Upload';
|
|
3
|
+
export * from './GraphQLUpload';
|
|
4
|
+
export * from './processRequest';
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import { Context } from
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { Context } from 'hono';
|
|
2
|
+
import { Readable } from 'stream';
|
|
3
|
+
|
|
4
|
+
import { WriteStream, Upload } from '.';
|
|
4
5
|
|
|
5
6
|
export async function processRequest(
|
|
6
|
-
ctx: Context
|
|
7
|
-
): Promise<Record<string,
|
|
7
|
+
ctx: Context,
|
|
8
|
+
): Promise<Record<string, unknown>> {
|
|
8
9
|
const body = await ctx.req.parseBody();
|
|
9
10
|
const operations = JSON.parse(body.operations as string);
|
|
10
11
|
const map = new Map(Object.entries(JSON.parse(body.map as string)));
|
|
11
12
|
|
|
12
13
|
for (const [fieldName, file] of Object.entries(body)) {
|
|
13
14
|
if (
|
|
14
|
-
fieldName ===
|
|
15
|
-
fieldName ===
|
|
15
|
+
fieldName === 'operations' ||
|
|
16
|
+
fieldName === 'map' ||
|
|
16
17
|
!(file instanceof File)
|
|
17
18
|
)
|
|
18
19
|
continue;
|
|
@@ -30,10 +31,10 @@ export async function processRequest(
|
|
|
30
31
|
filename: file.name,
|
|
31
32
|
mimetype: file.type,
|
|
32
33
|
fieldName,
|
|
33
|
-
encoding:
|
|
34
|
+
encoding: '7bit',
|
|
34
35
|
createReadStream: (options) => {
|
|
35
36
|
const stream = capacitor.createReadStream(options);
|
|
36
|
-
stream.on(
|
|
37
|
+
stream.on('close', () => {
|
|
37
38
|
capacitor.release();
|
|
38
39
|
});
|
|
39
40
|
return stream;
|
|
@@ -43,7 +44,7 @@ export async function processRequest(
|
|
|
43
44
|
upload.resolve(upload.file);
|
|
44
45
|
|
|
45
46
|
for (const fileKey of fileKeys) {
|
|
46
|
-
const pathSegments = fileKey.split(
|
|
47
|
+
const pathSegments = fileKey.split('.');
|
|
47
48
|
let current = operations;
|
|
48
49
|
for (let i = 0; i < pathSegments.length - 1; i++) {
|
|
49
50
|
if (!current[pathSegments[i]]) current[pathSegments[i]] = {};
|
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
import { ApolloServer, BaseContext, HeaderMap } from
|
|
2
|
-
import {
|
|
1
|
+
import { ApolloServer, BaseContext, HeaderMap } from '@apollo/server';
|
|
2
|
+
import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer';
|
|
3
|
+
import { ApolloDriverConfig } from '@nestjs/apollo';
|
|
4
|
+
import { Logger } from '@nestjs/common';
|
|
5
|
+
import { ModulesContainer } from '@nestjs/core';
|
|
3
6
|
import {
|
|
4
7
|
AbstractGraphQLDriver,
|
|
5
8
|
GqlSubscriptionService,
|
|
6
9
|
SubscriptionConfig,
|
|
7
|
-
} from
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { Context, HonoRequest } from "hono";
|
|
11
|
-
import { StatusCode } from "hono/utils/http-status";
|
|
12
|
-
import { Logger } from "@nestjs/common";
|
|
10
|
+
} from '@nestjs/graphql';
|
|
11
|
+
import { Context, HonoRequest } from 'hono';
|
|
12
|
+
import { StatusCode } from 'hono/utils/http-status';
|
|
13
13
|
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
14
|
+
import { processRequest } from './graphQLUpload';
|
|
15
|
+
import { PluginsExplorerService } from './services/plugins-explorer.service';
|
|
16
16
|
|
|
17
17
|
export class HonoGraphQLDriver<
|
|
18
|
-
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
19
|
+
T extends Record<string, any> = ApolloDriverConfig,
|
|
19
20
|
> extends AbstractGraphQLDriver {
|
|
20
21
|
protected apolloServer: ApolloServer<BaseContext>;
|
|
21
22
|
private _subscriptionService?: GqlSubscriptionService;
|
|
@@ -34,15 +35,15 @@ export class HonoGraphQLDriver<
|
|
|
34
35
|
const { httpAdapter } = this.httpAdapterHost;
|
|
35
36
|
const platformName = httpAdapter.getType();
|
|
36
37
|
|
|
37
|
-
if (platformName !==
|
|
38
|
-
throw new Error(
|
|
38
|
+
if (platformName !== 'hono') {
|
|
39
|
+
throw new Error('This driver is only compatible with the Hono platform');
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
await this.registerHono(options);
|
|
42
43
|
|
|
43
44
|
if (options.installSubscriptionHandlers || options.subscriptions) {
|
|
44
45
|
const subscriptionsOptions: SubscriptionConfig =
|
|
45
|
-
options.subscriptions || {
|
|
46
|
+
options.subscriptions || { 'subscriptions-transport-ws': {} };
|
|
46
47
|
this._subscriptionService = new GqlSubscriptionService(
|
|
47
48
|
{
|
|
48
49
|
schema: options.schema,
|
|
@@ -50,14 +51,14 @@ export class HonoGraphQLDriver<
|
|
|
50
51
|
context: options.context,
|
|
51
52
|
...subscriptionsOptions,
|
|
52
53
|
},
|
|
53
|
-
this.httpAdapterHost.httpAdapter?.getHttpServer()
|
|
54
|
+
this.httpAdapterHost.httpAdapter?.getHttpServer(),
|
|
54
55
|
);
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
protected async registerHono(
|
|
59
60
|
options: T,
|
|
60
|
-
{ preStartHook }: { preStartHook?: () => void } = {}
|
|
61
|
+
{ preStartHook }: { preStartHook?: () => void } = {},
|
|
61
62
|
) {
|
|
62
63
|
const { path, typeDefs, resolvers, schema } = options;
|
|
63
64
|
const { httpAdapter } = this.httpAdapterHost;
|
|
@@ -109,7 +110,7 @@ export class HonoGraphQLDriver<
|
|
|
109
110
|
|
|
110
111
|
ctx.status(status === undefined ? 200 : (status as StatusCode));
|
|
111
112
|
|
|
112
|
-
if (body.kind ===
|
|
113
|
+
if (body.kind === 'complete') {
|
|
113
114
|
return ctx.body(body.string);
|
|
114
115
|
}
|
|
115
116
|
|
|
@@ -123,7 +124,7 @@ export class HonoGraphQLDriver<
|
|
|
123
124
|
});
|
|
124
125
|
|
|
125
126
|
return new Response(readableStream, {
|
|
126
|
-
headers: {
|
|
127
|
+
headers: { 'Content-Type': 'application/octet-stream' },
|
|
127
128
|
});
|
|
128
129
|
});
|
|
129
130
|
|
|
@@ -143,15 +144,15 @@ export class HonoGraphQLDriver<
|
|
|
143
144
|
|
|
144
145
|
private async parseBody(ctx: Context): Promise<Record<string, unknown>> {
|
|
145
146
|
const req = ctx.req;
|
|
146
|
-
const contentType = req.header(
|
|
147
|
+
const contentType = req.header('content-type');
|
|
147
148
|
|
|
148
|
-
if (contentType ===
|
|
149
|
+
if (contentType === 'application/graphql')
|
|
149
150
|
return { query: await req.text() };
|
|
150
|
-
if (contentType ===
|
|
151
|
+
if (contentType === 'application/json')
|
|
151
152
|
return req.json().catch(this.logError);
|
|
152
|
-
if (contentType ===
|
|
153
|
+
if (contentType === 'application/x-www-form-urlencoded')
|
|
153
154
|
return this.parseFormURL(req);
|
|
154
|
-
if (contentType?.startsWith(
|
|
155
|
+
if (contentType?.startsWith('multipart/form-data')) {
|
|
155
156
|
return processRequest(ctx);
|
|
156
157
|
}
|
|
157
158
|
return {};
|
package/src/drivers/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
1
|
+
export * from './graphql.driver';
|
|
2
|
+
export * from './graphQLUpload';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
|
|
2
2
|
import { ModulesContainer } from '@nestjs/core/injector/modules-container';
|
|
3
3
|
import { BaseExplorerService, GqlModuleOptions } from '@nestjs/graphql';
|
|
4
|
+
|
|
4
5
|
import { PLUGIN_METADATA } from '../constants';
|
|
5
6
|
|
|
6
7
|
export class PluginsExplorerService extends BaseExplorerService {
|
|
@@ -16,7 +17,7 @@ export class PluginsExplorerService extends BaseExplorerService {
|
|
|
16
17
|
return this.flatMap(modules, (instance) => this.filterPlugins(instance));
|
|
17
18
|
}
|
|
18
19
|
|
|
19
|
-
filterPlugins<T =
|
|
20
|
+
filterPlugins<T = unknown>(wrapper: InstanceWrapper<T>) {
|
|
20
21
|
const { instance } = wrapper;
|
|
21
22
|
if (!instance) {
|
|
22
23
|
return undefined;
|
package/src/interfaces/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
1
|
+
export * from './nest-hono-application.interface';
|
|
2
|
+
export * from './hono.interface';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { ServeStaticOptions } from
|
|
2
|
-
import { HttpServer, INestApplication } from
|
|
3
|
-
import { Context, Hono, MiddlewareHandler } from
|
|
1
|
+
import { ServeStaticOptions } from '@hono/node-server/serve-static';
|
|
2
|
+
import { HttpServer, INestApplication } from '@nestjs/common';
|
|
3
|
+
import { Context, Hono, MiddlewareHandler } from 'hono';
|
|
4
4
|
|
|
5
5
|
export type TypeBodyParser =
|
|
6
|
-
|
|
|
7
|
-
|
|
|
8
|
-
|
|
|
6
|
+
| 'application/json'
|
|
7
|
+
| 'text/plain'
|
|
8
|
+
| 'application/x-www-form-urlencoded';
|
|
9
9
|
|
|
10
10
|
interface HonoViewOptions {
|
|
11
11
|
engine: string;
|
|
@@ -56,17 +56,17 @@ export interface NestHonoApplication<TServer extends Hono = Hono>
|
|
|
56
56
|
*/
|
|
57
57
|
listen(
|
|
58
58
|
port: number | string,
|
|
59
|
-
callback?: (err: Error, address: string) => void
|
|
59
|
+
callback?: (err: Error, address: string) => void,
|
|
60
60
|
): Promise<TServer>;
|
|
61
61
|
listen(
|
|
62
62
|
port: number | string,
|
|
63
63
|
address: string,
|
|
64
|
-
callback?: (err: Error, address: string) => void
|
|
64
|
+
callback?: (err: Error, address: string) => void,
|
|
65
65
|
): Promise<TServer>;
|
|
66
66
|
listen(
|
|
67
67
|
port: number | string,
|
|
68
68
|
address: string,
|
|
69
69
|
backlog: number,
|
|
70
|
-
callback?: (err: Error, address: string) => void
|
|
70
|
+
callback?: (err: Error, address: string) => void,
|
|
71
71
|
): Promise<TServer>;
|
|
72
72
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
1
|
+
export * from './uploaded-files-decorator';
|
|
2
|
+
export * from './uploaded-file-decorator';
|
|
@@ -5,7 +5,7 @@ import { StorageFile } from '../storage/storage';
|
|
|
5
5
|
|
|
6
6
|
export const UploadedFiles = createParamDecorator(
|
|
7
7
|
async (
|
|
8
|
-
_data:
|
|
8
|
+
_data: unknown,
|
|
9
9
|
ctx: ExecutionContext,
|
|
10
10
|
): Promise<Record<string, StorageFile[]> | StorageFile[] | undefined> => {
|
|
11
11
|
const req = getMultipartRequest(ctx.switchToHttp());
|
package/src/multer/fs/index.ts
CHANGED
|
@@ -1,22 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import { randomBytes } from '../crypto';
|
|
1
|
+
import { randomBytes } from 'crypto';
|
|
2
|
+
import { stat } from 'fs/promises';
|
|
3
|
+
import { extname } from 'path';
|
|
5
4
|
|
|
6
5
|
export const pathExists = async (path: string) => {
|
|
7
6
|
try {
|
|
8
|
-
await
|
|
9
|
-
|
|
7
|
+
await stat(path);
|
|
8
|
+
return true;
|
|
9
|
+
} catch {
|
|
10
10
|
return false;
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
return true;
|
|
14
12
|
};
|
|
15
13
|
|
|
16
14
|
export const getUniqueFilename = async (filename: string) => {
|
|
17
|
-
const buffer =
|
|
18
|
-
|
|
15
|
+
const buffer = randomBytes(16);
|
|
19
16
|
const ext = extname(filename);
|
|
20
|
-
|
|
21
17
|
return buffer.toString('hex') + ext;
|
|
22
18
|
};
|
package/src/multer/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
1
|
+
export * from './interceptors';
|
|
2
|
+
export * from './decorators';
|
|
3
|
+
export * from './storage';
|
|
4
|
+
export * from './multipart';
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { Observable, tap } 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 { handleMultipartAnyFiles } from '../multipart/handlers/any-files';
|
|
11
|
+
import { transformUploadOptions, UploadOptions } from '../multipart/options';
|
|
12
|
+
import { getMultipartRequest } from '../multipart/request';
|
|
13
13
|
|
|
14
14
|
export function AnyFilesInterceptor(
|
|
15
|
-
options?: UploadOptions
|
|
15
|
+
options?: UploadOptions,
|
|
16
16
|
): Type<NestInterceptor> {
|
|
17
17
|
class MixinInterceptor implements NestInterceptor {
|
|
18
18
|
private readonly options: UploadOptions;
|
|
@@ -21,26 +21,23 @@ export function AnyFilesInterceptor(
|
|
|
21
21
|
this.options = transformUploadOptions(options);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
async intercept(
|
|
25
|
-
context: ExecutionContext,
|
|
26
|
-
next: CallHandler
|
|
27
|
-
): Promise<Observable<any>> {
|
|
24
|
+
async intercept(context: ExecutionContext, next: CallHandler) {
|
|
28
25
|
const ctx = context.switchToHttp();
|
|
29
26
|
const req = getMultipartRequest(ctx);
|
|
30
27
|
|
|
31
|
-
if (!req.header(
|
|
28
|
+
if (!req.header('content-type')?.startsWith('multipart/form-data')) {
|
|
32
29
|
return next.handle();
|
|
33
30
|
}
|
|
34
31
|
|
|
35
32
|
const { body, files, remove } = await handleMultipartAnyFiles(
|
|
36
33
|
req,
|
|
37
|
-
this.options
|
|
34
|
+
this.options,
|
|
38
35
|
);
|
|
39
36
|
|
|
40
37
|
req.body = body;
|
|
41
38
|
req.storageFiles = files;
|
|
42
39
|
|
|
43
|
-
return next.handle().pipe(
|
|
40
|
+
return next.handle().pipe(finalize(remove));
|
|
44
41
|
}
|
|
45
42
|
}
|
|
46
43
|
|