@webiny/api-file-manager 0.0.0-unstable.7be00a75a9 → 0.0.0-unstable.7c2def32a7

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 (261) hide show
  1. package/FileManagerAppFeature.d.ts +5 -0
  2. package/FileManagerAppFeature.js +21 -0
  3. package/FileManagerAppFeature.js.map +1 -0
  4. package/delivery/AssetDelivery/AssetRequest.d.ts +1 -1
  5. package/delivery/AssetDelivery/AssetRequest.js.map +1 -1
  6. package/delivery/AssetDeliveryRoute.d.ts +24 -0
  7. package/delivery/AssetDeliveryRoute.js +69 -0
  8. package/delivery/AssetDeliveryRoute.js.map +1 -0
  9. package/delivery/setupAssetDelivery.d.ts +1 -1
  10. package/delivery/setupAssetDelivery.js +1 -66
  11. package/delivery/setupAssetDelivery.js.map +1 -1
  12. package/domain/file/abstractions.d.ts +13 -5
  13. package/domain/file/abstractions.js +2 -2
  14. package/domain/file/abstractions.js.map +1 -1
  15. package/domain/file/file.model.d.ts +3 -3
  16. package/domain/file/file.model.js +12 -7
  17. package/domain/file/file.model.js.map +1 -1
  18. package/domain/settings/validation.js +3 -10
  19. package/domain/settings/validation.js.map +1 -1
  20. package/exports/api/file-manager/assetDelivery.d.ts +10 -0
  21. package/exports/api/file-manager/assetDelivery.js +8 -0
  22. package/exports/api/file-manager/file.d.ts +2 -1
  23. package/exports/api/file-manager/file.js +2 -1
  24. package/features/FileManagerFeature.js +6 -0
  25. package/features/FileManagerFeature.js.map +1 -1
  26. package/features/assetDelivery/Asset/Asset.d.ts +8 -0
  27. package/features/assetDelivery/Asset/Asset.js +14 -0
  28. package/features/assetDelivery/Asset/Asset.js.map +1 -0
  29. package/features/assetDelivery/Asset/abstractions.d.ts +10 -0
  30. package/features/assetDelivery/Asset/abstractions.js +5 -0
  31. package/features/assetDelivery/Asset/abstractions.js.map +1 -0
  32. package/features/assetDelivery/Asset/index.d.ts +1 -0
  33. package/features/assetDelivery/Asset/index.js +1 -0
  34. package/features/assetDelivery/FilesAssetRequestResolver.js +2 -2
  35. package/features/assetDelivery/FilesAssetRequestResolver.js.map +1 -1
  36. package/features/assetDelivery/ObjectKey/ObjectKey.d.ts +8 -0
  37. package/features/assetDelivery/ObjectKey/ObjectKey.js +28 -0
  38. package/features/assetDelivery/ObjectKey/ObjectKey.js.map +1 -0
  39. package/features/assetDelivery/ObjectKey/abstractions.d.ts +12 -0
  40. package/features/assetDelivery/ObjectKey/abstractions.js +5 -0
  41. package/features/assetDelivery/ObjectKey/abstractions.js.map +1 -0
  42. package/features/assetDelivery/ObjectKey/index.d.ts +1 -0
  43. package/features/assetDelivery/ObjectKey/index.js +1 -0
  44. package/features/assetDelivery/StreamAssetReply/StreamAssetReply.d.ts +8 -0
  45. package/features/assetDelivery/StreamAssetReply/StreamAssetReply.js +22 -0
  46. package/features/assetDelivery/StreamAssetReply/StreamAssetReply.js.map +1 -0
  47. package/features/assetDelivery/StreamAssetReply/abstractions.d.ts +11 -0
  48. package/features/assetDelivery/StreamAssetReply/abstractions.js +5 -0
  49. package/features/assetDelivery/StreamAssetReply/abstractions.js.map +1 -0
  50. package/features/assetDelivery/StreamAssetReply/index.d.ts +1 -0
  51. package/features/assetDelivery/StreamAssetReply/index.js +1 -0
  52. package/features/assetDelivery/abstractions/AssetType.d.ts +17 -0
  53. package/features/assetDelivery/abstractions/AssetType.js +5 -0
  54. package/features/assetDelivery/abstractions/AssetType.js.map +1 -0
  55. package/features/assetDelivery/abstractions.d.ts +23 -12
  56. package/features/assetDelivery/abstractions.js.map +1 -1
  57. package/features/assetDelivery/assetTypes/image/AssetKeyGenerator.d.ts +12 -0
  58. package/features/assetDelivery/assetTypes/image/AssetKeyGenerator.js +30 -0
  59. package/features/assetDelivery/assetTypes/image/AssetKeyGenerator.js.map +1 -0
  60. package/features/assetDelivery/assetTypes/image/ImageAssetType.d.ts +9 -0
  61. package/features/assetDelivery/assetTypes/image/ImageAssetType.js +18 -0
  62. package/features/assetDelivery/assetTypes/image/ImageAssetType.js.map +1 -0
  63. package/features/assetDelivery/assetTypes/image/ImageAssetTypeHandler.d.ts +5 -0
  64. package/features/assetDelivery/assetTypes/image/ImageAssetTypeHandler.js +5 -0
  65. package/features/assetDelivery/assetTypes/image/ImageAssetTypeHandler.js.map +1 -0
  66. package/features/assetDelivery/assetTypes/image/SharpTransformer.d.ts +18 -0
  67. package/features/assetDelivery/assetTypes/image/SharpTransformer.js +47 -0
  68. package/features/assetDelivery/assetTypes/image/SharpTransformer.js.map +1 -0
  69. package/features/assetDelivery/assetTypes/image/WidthCollection.d.ts +8 -0
  70. package/features/assetDelivery/assetTypes/image/WidthCollection.js +22 -0
  71. package/features/assetDelivery/assetTypes/image/WidthCollection.js.map +1 -0
  72. package/features/assetDelivery/assetTypes/image/imageFormat.d.ts +26 -0
  73. package/features/assetDelivery/assetTypes/image/imageFormat.js +51 -0
  74. package/features/assetDelivery/assetTypes/image/imageFormat.js.map +1 -0
  75. package/features/assetDelivery/assetTypes/image/imageTypes.d.ts +39 -0
  76. package/features/assetDelivery/assetTypes/image/imageTypes.js +0 -0
  77. package/features/assetDelivery/assetTypes/image/index.d.ts +5 -0
  78. package/features/assetDelivery/assetTypes/image/index.js +4 -0
  79. package/features/assetDelivery/assetTypes/image/normalizeImageOptions.d.ts +6 -0
  80. package/features/assetDelivery/assetTypes/image/normalizeImageOptions.js +56 -0
  81. package/features/assetDelivery/assetTypes/image/normalizeImageOptions.js.map +1 -0
  82. package/features/assetDelivery/assetTypes/image/transformImage.d.ts +59 -0
  83. package/features/assetDelivery/assetTypes/image/transformImage.js +146 -0
  84. package/features/assetDelivery/assetTypes/image/transformImage.js.map +1 -0
  85. package/features/assetDelivery/assetTypes/image/utils.d.ts +26 -0
  86. package/features/assetDelivery/assetTypes/image/utils.js +47 -0
  87. package/features/assetDelivery/assetTypes/image/utils.js.map +1 -0
  88. package/features/assetDelivery/feature.js +13 -7
  89. package/features/assetDelivery/feature.js.map +1 -1
  90. package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.js +2 -2
  91. package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.js.map +1 -1
  92. package/features/assetDelivery/privateFiles/PrivateFilesAssetProcessor.js.map +1 -1
  93. package/features/assetDelivery/transformation/CallableContentsReader.d.ts +11 -0
  94. package/features/assetDelivery/transformation/CallableContentsReader.js +14 -0
  95. package/features/assetDelivery/transformation/CallableContentsReader.js.map +1 -0
  96. package/features/assetDelivery/transformation/TransformationAssetProcessor.d.ts +4 -6
  97. package/features/assetDelivery/transformation/TransformationAssetProcessor.js +13 -11
  98. package/features/assetDelivery/transformation/TransformationAssetProcessor.js.map +1 -1
  99. package/features/assetDelivery/transformation/index.d.ts +5 -0
  100. package/features/assetDelivery/transformation/index.js +4 -0
  101. package/features/extractMetadata/ExtractMetadataHandler.d.ts +11 -0
  102. package/features/extractMetadata/ExtractMetadataHandler.js +25 -0
  103. package/features/extractMetadata/ExtractMetadataHandler.js.map +1 -0
  104. package/features/extractMetadata/ExtractMetadataInput.d.ts +3 -0
  105. package/features/extractMetadata/ExtractMetadataInput.js +0 -0
  106. package/features/file/CreateFile/CreateFileRepository.d.ts +3 -3
  107. package/features/file/CreateFile/CreateFileRepository.js +6 -5
  108. package/features/file/CreateFile/CreateFileRepository.js.map +1 -1
  109. package/features/file/DeleteFile/DeleteFileRepository.d.ts +3 -3
  110. package/features/file/DeleteFile/DeleteFileRepository.js +6 -5
  111. package/features/file/DeleteFile/DeleteFileRepository.js.map +1 -1
  112. package/features/file/FileModelProvider.d.ts +31 -0
  113. package/features/file/FileModelProvider.js +22 -0
  114. package/features/file/FileModelProvider.js.map +1 -0
  115. package/features/file/FileUrlGenerator/FileUrlGenerator.d.ts +12 -0
  116. package/features/file/FileUrlGenerator/FileUrlGenerator.js +19 -0
  117. package/features/file/FileUrlGenerator/FileUrlGenerator.js.map +1 -0
  118. package/features/file/FileUrlGenerator/SettingsFileUrlPrefixProvider.d.ts +13 -0
  119. package/features/file/FileUrlGenerator/SettingsFileUrlPrefixProvider.js +29 -0
  120. package/features/file/FileUrlGenerator/SettingsFileUrlPrefixProvider.js.map +1 -0
  121. package/features/file/FileUrlGenerator/abstractions.d.ts +15 -4
  122. package/features/file/FileUrlGenerator/abstractions.js +3 -2
  123. package/features/file/FileUrlGenerator/abstractions.js.map +1 -1
  124. package/features/file/FileUrlGenerator/feature.d.ts +4 -0
  125. package/features/file/FileUrlGenerator/feature.js +13 -0
  126. package/features/file/FileUrlGenerator/feature.js.map +1 -0
  127. package/features/file/FileUrlGenerator/index.d.ts +2 -0
  128. package/features/file/FileUrlGenerator/index.js +1 -0
  129. package/features/file/GetFile/GetFileRepository.d.ts +3 -3
  130. package/features/file/GetFile/GetFileRepository.js +6 -5
  131. package/features/file/GetFile/GetFileRepository.js.map +1 -1
  132. package/features/file/GetFileByUrl/GetFileByUrlUseCase.d.ts +15 -0
  133. package/features/file/GetFileByUrl/GetFileByUrlUseCase.js +37 -0
  134. package/features/file/GetFileByUrl/GetFileByUrlUseCase.js.map +1 -0
  135. package/features/file/GetFileByUrl/abstractions.d.ts +18 -0
  136. package/features/file/GetFileByUrl/abstractions.js +5 -0
  137. package/features/file/GetFileByUrl/abstractions.js.map +1 -0
  138. package/features/file/GetFileByUrl/feature.d.ts +4 -0
  139. package/features/file/GetFileByUrl/feature.js +11 -0
  140. package/features/file/GetFileByUrl/feature.js.map +1 -0
  141. package/features/file/GetFileByUrl/index.d.ts +1 -0
  142. package/features/file/GetFileByUrl/index.js +1 -0
  143. package/features/file/ListFiles/ListFilesRepository.d.ts +3 -3
  144. package/features/file/ListFiles/ListFilesRepository.js +8 -7
  145. package/features/file/ListFiles/ListFilesRepository.js.map +1 -1
  146. package/features/file/ListImagesByTagTool/ListImagesByTagTool.d.ts +15 -5
  147. package/features/file/ListImagesByTagTool/ListImagesByTagTool.js +21 -7
  148. package/features/file/ListImagesByTagTool/ListImagesByTagTool.js.map +1 -1
  149. package/features/file/ListTags/ListTagsRepository.d.ts +3 -3
  150. package/features/file/ListTags/ListTagsRepository.js +7 -6
  151. package/features/file/ListTags/ListTagsRepository.js.map +1 -1
  152. package/features/file/UpdateFile/UpdateFileRepository.d.ts +3 -3
  153. package/features/file/UpdateFile/UpdateFileRepository.js +6 -5
  154. package/features/file/UpdateFile/UpdateFileRepository.js.map +1 -1
  155. package/features/settings/SettingsInstaller/SettingsInstaller.js +1 -4
  156. package/features/settings/SettingsInstaller/SettingsInstaller.js.map +1 -1
  157. package/features/settings/UpdateSettings/UpdateSettingsUseCase.d.ts +3 -1
  158. package/features/settings/UpdateSettings/UpdateSettingsUseCase.js +10 -2
  159. package/features/settings/UpdateSettings/UpdateSettingsUseCase.js.map +1 -1
  160. package/features/upload/CompleteMultiPartUpload/abstractions.d.ts +12 -0
  161. package/features/upload/CompleteMultiPartUpload/abstractions.js +5 -0
  162. package/features/upload/CompleteMultiPartUpload/abstractions.js.map +1 -0
  163. package/features/upload/CompleteMultiPartUpload/index.d.ts +1 -0
  164. package/features/upload/CompleteMultiPartUpload/index.js +1 -0
  165. package/features/upload/CreateMultiPartUpload/abstractions.d.ts +14 -0
  166. package/features/upload/CreateMultiPartUpload/abstractions.js +5 -0
  167. package/features/upload/CreateMultiPartUpload/abstractions.js.map +1 -0
  168. package/features/upload/CreateMultiPartUpload/index.d.ts +1 -0
  169. package/features/upload/CreateMultiPartUpload/index.js +1 -0
  170. package/features/upload/GetUploadPayload/abstractions.d.ts +10 -0
  171. package/features/upload/GetUploadPayload/abstractions.js +5 -0
  172. package/features/upload/GetUploadPayload/abstractions.js.map +1 -0
  173. package/features/upload/GetUploadPayload/index.d.ts +1 -0
  174. package/features/upload/GetUploadPayload/index.js +1 -0
  175. package/features/upload/ReadFileMetadata/MetadataReader.d.ts +11 -0
  176. package/features/upload/ReadFileMetadata/MetadataReader.js +21 -0
  177. package/features/upload/ReadFileMetadata/MetadataReader.js.map +1 -0
  178. package/features/upload/ReadFileMetadata/abstractions.d.ts +15 -0
  179. package/features/upload/ReadFileMetadata/abstractions.js +5 -0
  180. package/features/upload/ReadFileMetadata/abstractions.js.map +1 -0
  181. package/features/upload/ReadFileMetadata/feature.d.ts +4 -0
  182. package/features/upload/ReadFileMetadata/feature.js +11 -0
  183. package/features/upload/ReadFileMetadata/feature.js.map +1 -0
  184. package/features/upload/ReadFileMetadata/index.d.ts +1 -0
  185. package/features/upload/ReadFileMetadata/index.js +1 -0
  186. package/features/upload/WriteFileMetadata/MetadataWriter.d.ts +14 -0
  187. package/features/upload/WriteFileMetadata/MetadataWriter.js +36 -0
  188. package/features/upload/WriteFileMetadata/MetadataWriter.js.map +1 -0
  189. package/features/upload/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.d.ts +11 -0
  190. package/features/upload/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +20 -0
  191. package/features/upload/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -0
  192. package/features/upload/WriteFileMetadata/WriteMetadataAfterCreateHandler.d.ts +11 -0
  193. package/features/upload/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +22 -0
  194. package/features/upload/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -0
  195. package/features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.d.ts +11 -0
  196. package/features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.js +22 -0
  197. package/features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.js.map +1 -0
  198. package/features/upload/WriteFileMetadata/abstractions.d.ts +9 -0
  199. package/features/upload/WriteFileMetadata/abstractions.js +5 -0
  200. package/features/upload/WriteFileMetadata/abstractions.js.map +1 -0
  201. package/features/upload/WriteFileMetadata/feature.d.ts +4 -0
  202. package/features/upload/WriteFileMetadata/feature.js +17 -0
  203. package/features/upload/WriteFileMetadata/feature.js.map +1 -0
  204. package/features/upload/index.d.ts +17 -0
  205. package/features/upload/index.js +10 -0
  206. package/features/upload/types.d.ts +28 -0
  207. package/features/upload/types.js +0 -0
  208. package/features/upload/utils/FileExtension.d.ts +6 -0
  209. package/features/upload/utils/FileExtension.js +16 -0
  210. package/features/upload/utils/FileExtension.js.map +1 -0
  211. package/features/upload/utils/FileKey.d.ts +11 -0
  212. package/features/upload/utils/FileKey.js +33 -0
  213. package/features/upload/utils/FileKey.js.map +1 -0
  214. package/features/upload/utils/FileNormalizer.d.ts +13 -0
  215. package/features/upload/utils/FileNormalizer.js +41 -0
  216. package/features/upload/utils/FileNormalizer.js.map +1 -0
  217. package/features/upload/utils/FileUploadModifier.d.ts +30 -0
  218. package/features/upload/utils/FileUploadModifier.js +39 -0
  219. package/features/upload/utils/FileUploadModifier.js.map +1 -0
  220. package/features/upload/utils/checkPermissions.d.ts +5 -0
  221. package/features/upload/utils/checkPermissions.js +22 -0
  222. package/features/upload/utils/checkPermissions.js.map +1 -0
  223. package/features/upload/utils/createFileNormalizerFromContext.d.ts +3 -0
  224. package/features/upload/utils/createFileNormalizerFromContext.js +9 -0
  225. package/features/upload/utils/createFileNormalizerFromContext.js.map +1 -0
  226. package/features/upload/utils/mimeTypes.d.ts +1 -0
  227. package/features/upload/utils/mimeTypes.js +9 -0
  228. package/features/upload/utils/mimeTypes.js.map +1 -0
  229. package/graphql/FmGraphQLSchema.d.ts +24 -0
  230. package/graphql/FmGraphQLSchema.js +459 -0
  231. package/graphql/FmGraphQLSchema.js.map +1 -0
  232. package/index.d.ts +3 -6
  233. package/index.js +3 -32
  234. package/index.js.map +1 -1
  235. package/package.json +23 -17
  236. package/types.d.ts +1 -1
  237. package/types.js +1 -1
  238. package/features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.d.ts +0 -9
  239. package/features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.js +0 -13
  240. package/features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.js.map +0 -1
  241. package/graphql/baseSchema.d.ts +0 -3
  242. package/graphql/baseSchema.js +0 -100
  243. package/graphql/baseSchema.js.map +0 -1
  244. package/graphql/createFilesTypeDefs.d.ts +0 -8
  245. package/graphql/createFilesTypeDefs.js +0 -191
  246. package/graphql/createFilesTypeDefs.js.map +0 -1
  247. package/graphql/filesSchema.d.ts +0 -4
  248. package/graphql/filesSchema.js +0 -96
  249. package/graphql/filesSchema.js.map +0 -1
  250. package/graphql/getFileByUrl.d.ts +0 -3
  251. package/graphql/getFileByUrl.js +0 -61
  252. package/graphql/getFileByUrl.js.map +0 -1
  253. package/graphql/index.d.ts +0 -4
  254. package/graphql/index.js +0 -47
  255. package/graphql/index.js.map +0 -1
  256. package/graphql/utils.d.ts +0 -11
  257. package/graphql/utils.js +0 -12
  258. package/graphql/utils.js.map +0 -1
  259. package/modelModifier/CmsModelModifier.d.ts +0 -26
  260. package/modelModifier/CmsModelModifier.js +0 -51
  261. package/modelModifier/CmsModelModifier.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/upload/utils/FileNormalizer.js","sources":["../../../../src/features/upload/utils/FileNormalizer.ts"],"sourcesContent":["import { mdbid } from \"@webiny/utils\";\nimport type { FileData, PresignedPostPayloadData } from \"~/features/upload/types.js\";\nimport { FileKey } from \"./FileKey.js\";\nimport { mimeTypes } from \"./mimeTypes.js\";\nimport type { FileModifier } from \"./FileUploadModifier.js\";\n\nexport interface FileToSign {\n name: string;\n key: string;\n type: string;\n size: number;\n}\n\nconst extensionToMime = new Map<string, string>();\nfor (const [mime, extensions] of Object.entries(mimeTypes)) {\n for (const ext of extensions) {\n if (!extensionToMime.has(ext)) {\n extensionToMime.set(ext, mime);\n }\n }\n}\n\nfunction resolveTypeFromName(name: string): string {\n const ext = name.slice(name.lastIndexOf(\".\") + 1).toLowerCase();\n return extensionToMime.get(ext) || \"application/octet-stream\";\n}\n\n/*\n * FileNormalizer normalizes file data, before it's signed for upload.\n * It generates a unique file id, and makes sure that the file key includes the unique id.\n */\nexport class FileNormalizer {\n private readonly modifier: FileModifier | undefined;\n\n constructor(modifier?: FileModifier) {\n this.modifier = modifier;\n }\n\n async normalizeFile(payload: PresignedPostPayloadData): Promise<FileData> {\n const data = {\n ...payload,\n id: payload.id || mdbid(),\n type: payload.type || resolveTypeFromName(payload.name)\n };\n\n const key = new FileKey(data);\n const defaultKey = key.toString();\n\n const file: FileToSign = {\n name: data.name,\n type: data.type,\n key: defaultKey,\n size: data.size\n };\n\n if (this.modifier) {\n Object.assign(file, await this.modifier(file));\n }\n\n if (defaultKey !== file.key) {\n key.setKey(file.key);\n }\n\n return {\n id: data.id,\n key: key.toString(),\n name: file.name,\n size: file.size,\n type: file.type\n };\n }\n}\n"],"names":["extensionToMime","Map","mime","extensions","Object","mimeTypes","ext","resolveTypeFromName","name","FileNormalizer","modifier","payload","data","mdbid","key","FileKey","defaultKey","file"],"mappings":";;;AAaA,MAAMA,kBAAkB,IAAIC;AAC5B,KAAK,MAAM,CAACC,MAAMC,WAAW,IAAIC,OAAO,OAAO,CAACC,iCAC5C,KAAK,MAAMC,OAAOH,WACd,IAAI,CAACH,gBAAgB,GAAG,CAACM,MACrBN,gBAAgB,GAAG,CAACM,KAAKJ;AAKrC,SAASK,oBAAoBC,IAAY;IACrC,MAAMF,MAAME,KAAK,KAAK,CAACA,KAAK,WAAW,CAAC,OAAO,GAAG,WAAW;IAC7D,OAAOR,gBAAgB,GAAG,CAACM,QAAQ;AACvC;AAMO,MAAMG;IAGT,YAAYC,QAAuB,CAAE;QACjC,IAAI,CAAC,QAAQ,GAAGA;IACpB;IAEA,MAAM,cAAcC,OAAiC,EAAqB;QACtE,MAAMC,OAAO;YACT,GAAGD,OAAO;YACV,IAAIA,QAAQ,EAAE,IAAIE;YAClB,MAAMF,QAAQ,IAAI,IAAIJ,oBAAoBI,QAAQ,IAAI;QAC1D;QAEA,MAAMG,MAAM,IAAIC,QAAQH;QACxB,MAAMI,aAAaF,IAAI,QAAQ;QAE/B,MAAMG,OAAmB;YACrB,MAAML,KAAK,IAAI;YACf,MAAMA,KAAK,IAAI;YACf,KAAKI;YACL,MAAMJ,KAAK,IAAI;QACnB;QAEA,IAAI,IAAI,CAAC,QAAQ,EACbR,OAAO,MAAM,CAACa,MAAM,MAAM,IAAI,CAAC,QAAQ,CAACA;QAG5C,IAAID,eAAeC,KAAK,GAAG,EACvBH,IAAI,MAAM,CAACG,KAAK,GAAG;QAGvB,OAAO;YACH,IAAIL,KAAK,EAAE;YACX,KAAKE,IAAI,QAAQ;YACjB,MAAMG,KAAK,IAAI;YACf,MAAMA,KAAK,IAAI;YACf,MAAMA,KAAK,IAAI;QACnB;IACJ;AACJ"}
@@ -0,0 +1,30 @@
1
+ import { Plugin } from "@webiny/plugins";
2
+ import type { FileToSign } from "./FileNormalizer.js";
3
+ interface Setter<T> {
4
+ (param: T): T;
5
+ }
6
+ declare class FileUploadModifier {
7
+ private fileSetters;
8
+ setFile(setter: Setter<FileToSign>): void;
9
+ execute(file: FileToSign): Promise<FileToSign>;
10
+ }
11
+ interface FileUploadModifierCallbackParams {
12
+ modifier: {
13
+ setFile: FileUploadModifier["setFile"];
14
+ };
15
+ }
16
+ export declare class FileUploadModifierPlugin extends Plugin {
17
+ static type: string;
18
+ private readonly cb;
19
+ constructor(cb: FileUploadModifierCallable);
20
+ execute(params: FileUploadModifierCallbackParams): void;
21
+ }
22
+ interface FileUploadModifierCallable {
23
+ (params: FileUploadModifierCallbackParams): void;
24
+ }
25
+ export declare const createFileUploadModifier: (cb: FileUploadModifierCallable) => FileUploadModifierPlugin;
26
+ export interface FileModifier {
27
+ (file: FileToSign): Promise<Partial<FileToSign>> | Partial<FileToSign>;
28
+ }
29
+ export declare const createModifierFromPlugins: (plugins?: FileUploadModifierPlugin[]) => FileModifier;
30
+ export {};
@@ -0,0 +1,39 @@
1
+ import p_reduce from "p-reduce";
2
+ import { Plugin } from "@webiny/plugins";
3
+ class FileUploadModifier {
4
+ setFile(setter) {
5
+ this.fileSetters.push(setter);
6
+ }
7
+ execute(file) {
8
+ return p_reduce(this.fileSetters, async (file, setter)=>({
9
+ ...file,
10
+ ...await setter(file)
11
+ }), file);
12
+ }
13
+ constructor(){
14
+ this.fileSetters = [];
15
+ }
16
+ }
17
+ class FileUploadModifierPlugin extends Plugin {
18
+ static{
19
+ this.type = "fm.uploadModifier";
20
+ }
21
+ constructor(cb){
22
+ super();
23
+ this.cb = cb;
24
+ }
25
+ execute(params) {
26
+ return this.cb(params);
27
+ }
28
+ }
29
+ const createFileUploadModifier = (cb)=>new FileUploadModifierPlugin(cb);
30
+ const createModifierFromPlugins = (plugins = [])=>{
31
+ const modifier = new FileUploadModifier();
32
+ plugins.forEach((pl)=>pl.execute({
33
+ modifier
34
+ }));
35
+ return (file)=>modifier.execute(file);
36
+ };
37
+ export { FileUploadModifierPlugin, createFileUploadModifier, createModifierFromPlugins };
38
+
39
+ //# sourceMappingURL=FileUploadModifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/upload/utils/FileUploadModifier.js","sources":["../../../../src/features/upload/utils/FileUploadModifier.ts"],"sourcesContent":["import pReduce from \"p-reduce\";\nimport { Plugin } from \"@webiny/plugins\";\nimport type { FileToSign } from \"./FileNormalizer.js\";\n\ninterface Setter<T> {\n (param: T): T;\n}\n\nclass FileUploadModifier {\n private fileSetters: Setter<FileToSign>[] = [];\n\n setFile(setter: Setter<FileToSign>): void {\n this.fileSetters.push(setter);\n }\n\n execute(file: FileToSign) {\n return pReduce(\n this.fileSetters,\n async (file, setter) => {\n /* We need to spread the original file, then add (potentially) partial changes. */\n return { ...file, ...(await setter(file)) };\n },\n file\n );\n }\n}\n\ninterface FileUploadModifierCallbackParams {\n modifier: {\n setFile: FileUploadModifier[\"setFile\"];\n };\n}\n\nexport class FileUploadModifierPlugin extends Plugin {\n public static override type = \"fm.uploadModifier\";\n private readonly cb: FileUploadModifierCallable;\n\n constructor(cb: FileUploadModifierCallable) {\n super();\n this.cb = cb;\n }\n\n execute(params: FileUploadModifierCallbackParams) {\n return this.cb(params);\n }\n}\n\ninterface FileUploadModifierCallable {\n (params: FileUploadModifierCallbackParams): void;\n}\n\nexport const createFileUploadModifier = (cb: FileUploadModifierCallable) => {\n return new FileUploadModifierPlugin(cb);\n};\n\nexport interface FileModifier {\n (file: FileToSign): Promise<Partial<FileToSign>> | Partial<FileToSign>;\n}\n\nexport const createModifierFromPlugins = (\n plugins: FileUploadModifierPlugin[] = []\n): FileModifier => {\n const modifier = new FileUploadModifier();\n plugins.forEach(pl => pl.execute({ modifier }));\n\n return (file: FileToSign) => modifier.execute(file);\n};\n"],"names":["FileUploadModifier","setter","file","pReduce","FileUploadModifierPlugin","Plugin","cb","params","createFileUploadModifier","createModifierFromPlugins","plugins","modifier","pl"],"mappings":";;AAQA,MAAMA;IAGF,QAAQC,MAA0B,EAAQ;QACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAACA;IAC1B;IAEA,QAAQC,IAAgB,EAAE;QACtB,OAAOC,SACH,IAAI,CAAC,WAAW,EAChB,OAAOD,MAAMD,SAEF;gBAAE,GAAGC,IAAI;gBAAE,GAAI,MAAMD,OAAOC,KAAK;YAAE,IAE9CA;IAER;;aAfQ,WAAW,GAAyB,EAAE;;AAgBlD;AAQO,MAAME,iCAAiCC;;aACnB,IAAI,GAAG;;IAG9B,YAAYC,EAA8B,CAAE;QACxC,KAAK;QACL,IAAI,CAAC,EAAE,GAAGA;IACd;IAEA,QAAQC,MAAwC,EAAE;QAC9C,OAAO,IAAI,CAAC,EAAE,CAACA;IACnB;AACJ;AAMO,MAAMC,2BAA2B,CAACF,KAC9B,IAAIF,yBAAyBE;AAOjC,MAAMG,4BAA4B,CACrCC,UAAsC,EAAE;IAExC,MAAMC,WAAW,IAAIX;IACrBU,QAAQ,OAAO,CAACE,CAAAA,KAAMA,GAAG,OAAO,CAAC;YAAED;QAAS;IAE5C,OAAO,CAACT,OAAqBS,SAAS,OAAO,CAACT;AAClD"}
@@ -0,0 +1,5 @@
1
+ import type { FilePermission } from "../../../types.js";
2
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
3
+ export declare const checkPermissions: (identityContext: IdentityContext.Interface, check?: {
4
+ rwd?: string;
5
+ }) => Promise<FilePermission[]>;
@@ -0,0 +1,22 @@
1
+ import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/index.js";
2
+ const checkPermissions = async (identityContext, check = {})=>{
3
+ const filePermissions = await identityContext.getPermissions("fm.file");
4
+ const relevantFilePermissions = filePermissions.filter((current)=>{
5
+ if (check.rwd && !hasRwd(current, check.rwd)) return false;
6
+ return true;
7
+ });
8
+ if (0 === relevantFilePermissions.length) throw new NotAuthorizedError();
9
+ return relevantFilePermissions;
10
+ };
11
+ const hasRwd = (filesFilePermissions, rwd)=>{
12
+ if (!Array.isArray(filesFilePermissions)) filesFilePermissions = [
13
+ filesFilePermissions
14
+ ];
15
+ if (!rwd) return true;
16
+ const permissionWithoutRwdRestrictions = filesFilePermissions.some((permission)=>"string" != typeof permission.rwd);
17
+ if (permissionWithoutRwdRestrictions) return true;
18
+ return filesFilePermissions.some((permission)=>permission.rwd && permission.rwd.includes(rwd));
19
+ };
20
+ export { checkPermissions };
21
+
22
+ //# sourceMappingURL=checkPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/upload/utils/checkPermissions.js","sources":["../../../../src/features/upload/utils/checkPermissions.ts"],"sourcesContent":["import type { FilePermission } from \"~/types.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\n\nexport const checkPermissions = async (\n identityContext: IdentityContext.Interface,\n check: { rwd?: string } = {}\n) => {\n const filePermissions = await identityContext.getPermissions<FilePermission>(\"fm.file\");\n\n const relevantFilePermissions = filePermissions.filter(current => {\n if (check.rwd && !hasRwd(current, check.rwd)) {\n return false;\n }\n\n return true;\n });\n\n if (relevantFilePermissions.length === 0) {\n throw new NotAuthorizedError();\n }\n\n return relevantFilePermissions;\n};\n\nconst hasRwd = (filesFilePermissions: FilePermission | FilePermission[], rwd: string): boolean => {\n if (!Array.isArray(filesFilePermissions)) {\n filesFilePermissions = [filesFilePermissions];\n }\n\n if (!rwd) {\n return true;\n }\n\n /* Is there a permission that doesn't restrict RWD, all RWD permissions are allowed. */\n const permissionWithoutRwdRestrictions = filesFilePermissions.some(permission => {\n return typeof permission.rwd !== \"string\";\n });\n\n if (permissionWithoutRwdRestrictions) {\n return true;\n }\n\n return filesFilePermissions.some(permission => {\n return permission.rwd && permission.rwd.includes(rwd);\n });\n};\n"],"names":["checkPermissions","identityContext","check","filePermissions","relevantFilePermissions","current","hasRwd","NotAuthorizedError","filesFilePermissions","rwd","Array","permissionWithoutRwdRestrictions","permission"],"mappings":";AAIO,MAAMA,mBAAmB,OAC5BC,iBACAC,QAA0B,CAAC,CAAC;IAE5B,MAAMC,kBAAkB,MAAMF,gBAAgB,cAAc,CAAiB;IAE7E,MAAMG,0BAA0BD,gBAAgB,MAAM,CAACE,CAAAA;QACnD,IAAIH,MAAM,GAAG,IAAI,CAACI,OAAOD,SAASH,MAAM,GAAG,GACvC,OAAO;QAGX,OAAO;IACX;IAEA,IAAIE,AAAmC,MAAnCA,wBAAwB,MAAM,EAC9B,MAAM,IAAIG;IAGd,OAAOH;AACX;AAEA,MAAME,SAAS,CAACE,sBAAyDC;IACrE,IAAI,CAACC,MAAM,OAAO,CAACF,uBACfA,uBAAuB;QAACA;KAAqB;IAGjD,IAAI,CAACC,KACD,OAAO;IAIX,MAAME,mCAAmCH,qBAAqB,IAAI,CAACI,CAAAA,aACxD,AAA0B,YAA1B,OAAOA,WAAW,GAAG;IAGhC,IAAID,kCACA,OAAO;IAGX,OAAOH,qBAAqB,IAAI,CAACI,CAAAA,aACtBA,WAAW,GAAG,IAAIA,WAAW,GAAG,CAAC,QAAQ,CAACH;AAEzD"}
@@ -0,0 +1,3 @@
1
+ import type { Context } from "@webiny/api/types.js";
2
+ import { FileNormalizer } from "./FileNormalizer.js";
3
+ export declare const createFileNormalizerFromContext: (context: Context) => FileNormalizer;
@@ -0,0 +1,9 @@
1
+ import { FileNormalizer } from "./FileNormalizer.js";
2
+ import { FileUploadModifierPlugin, createModifierFromPlugins } from "./FileUploadModifier.js";
3
+ const createFileNormalizerFromContext = (context)=>{
4
+ const modifierPlugins = context.plugins.byType(FileUploadModifierPlugin.type);
5
+ return new FileNormalizer(createModifierFromPlugins(modifierPlugins));
6
+ };
7
+ export { createFileNormalizerFromContext };
8
+
9
+ //# sourceMappingURL=createFileNormalizerFromContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/upload/utils/createFileNormalizerFromContext.js","sources":["../../../../src/features/upload/utils/createFileNormalizerFromContext.ts"],"sourcesContent":["import type { Context } from \"@webiny/api/types.js\";\nimport { FileNormalizer } from \"./FileNormalizer.js\";\nimport { createModifierFromPlugins } from \"./FileUploadModifier.js\";\nimport { FileUploadModifierPlugin } from \"./FileUploadModifier.js\";\n\nexport const createFileNormalizerFromContext = (context: Context) => {\n const modifierPlugins = context.plugins.byType<FileUploadModifierPlugin>(\n FileUploadModifierPlugin.type\n );\n\n return new FileNormalizer(createModifierFromPlugins(modifierPlugins));\n};\n"],"names":["createFileNormalizerFromContext","context","modifierPlugins","FileUploadModifierPlugin","FileNormalizer","createModifierFromPlugins"],"mappings":";;AAKO,MAAMA,kCAAkC,CAACC;IAC5C,MAAMC,kBAAkBD,QAAQ,OAAO,CAAC,MAAM,CAC1CE,yBAAyB,IAAI;IAGjC,OAAO,IAAIC,eAAeC,0BAA0BH;AACxD"}
@@ -0,0 +1 @@
1
+ export declare const mimeTypes: Record<string, string[]>;
@@ -0,0 +1,9 @@
1
+ import other from "mime/types/other.js";
2
+ import standard from "mime/types/standard.js";
3
+ const mimeTypes_mimeTypes = {
4
+ ...other,
5
+ ...standard
6
+ };
7
+ export { mimeTypes_mimeTypes as mimeTypes };
8
+
9
+ //# sourceMappingURL=mimeTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/upload/utils/mimeTypes.js","sources":["../../../../src/features/upload/utils/mimeTypes.ts"],"sourcesContent":["import vendorTypes from \"mime/types/other.js\";\nimport standardTypes from \"mime/types/standard.js\";\n\n/*\n * We need to get all extensions that are defined for a specific content type.\n * This operation is not available via the `mime` package, so we create such an object ourselves.\n */\nexport const mimeTypes: Record<string, string[]> = {\n ...vendorTypes,\n ...standardTypes\n};\n"],"names":["mimeTypes","vendorTypes","standardTypes"],"mappings":";;AAOO,MAAMA,sBAAsC;IAC/C,GAAGC,KAAW;IACd,GAAGC,QAAa;AACpB"}
@@ -0,0 +1,24 @@
1
+ import { GraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.js";
2
+ import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels/index.js";
3
+ import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js";
4
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
5
+ import { FileModelProvider } from "../domain/file/abstractions.js";
6
+ declare class FmGraphQLSchema_ implements GraphQLSchemaFactory.Interface {
7
+ private readonly identityContext;
8
+ private readonly listModelsUseCase;
9
+ private readonly fieldRegistry;
10
+ private readonly fileModelProvider;
11
+ constructor(identityContext: IdentityContext.Interface, listModelsUseCase: ListModelsUseCase.Interface, fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface, fileModelProvider: FileModelProvider.Interface);
12
+ getSchemaKey(): Promise<string>;
13
+ execute(builder: GraphQLSchemaFactory.SchemaBuilder): Promise<GraphQLSchemaFactory.SchemaBuilder>;
14
+ private addBaseTypeDefs;
15
+ private addFileTypeDefs;
16
+ private addSettingsResolvers;
17
+ private addFileQueryResolvers;
18
+ private addFileMutationResolvers;
19
+ private loadModels;
20
+ }
21
+ export declare const FmGraphQLSchema: typeof FmGraphQLSchema_ & {
22
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-graphql/graphql/abstractions.public").IGraphQLSchemaFactory>;
23
+ };
24
+ export {};
@@ -0,0 +1,459 @@
1
+ import { GraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.js";
2
+ import { createModelSchemaKey } from "@webiny/api-headless-cms/utils/createModelSchemaKey.js";
3
+ import { ErrorResponse, ListResponse, NotFoundResponse, Response } from "@webiny/api-graphql";
4
+ import { renderFields } from "@webiny/api-headless-cms/utils/renderFields.js";
5
+ import { renderInputFields } from "@webiny/api-headless-cms/utils/renderInputFields.js";
6
+ import { renderListFilterFields } from "@webiny/api-headless-cms/utils/renderListFilterFields.js";
7
+ import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels/index.js";
8
+ import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js";
9
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
10
+ import { GetFileUseCase } from "../features/file/GetFile/abstractions.js";
11
+ import { ListFilesUseCase } from "../features/file/ListFiles/abstractions.js";
12
+ import { ListTagsUseCase } from "../features/file/ListTags/abstractions.js";
13
+ import { CreateFileUseCase } from "../features/file/CreateFile/abstractions.js";
14
+ import { CreateFilesInBatchUseCase } from "../features/file/CreateFilesInBatch/abstractions.js";
15
+ import { UpdateFileUseCase } from "../features/file/UpdateFile/abstractions.js";
16
+ import { DeleteFileUseCase } from "../features/file/DeleteFile/abstractions.js";
17
+ import { GetFileByUrlUseCase } from "../features/file/GetFileByUrl/abstractions.js";
18
+ import { GetSettingsUseCase } from "../features/settings/GetSettings/abstractions.js";
19
+ import { UpdateSettingsUseCase } from "../features/settings/UpdateSettings/abstractions.js";
20
+ import { FileUrlGenerator } from "../features/file/FileUrlGenerator/abstractions.js";
21
+ import { FileModelProvider } from "../domain/file/abstractions.js";
22
+ const removeFieldRequiredValidation = (field)=>{
23
+ if (field.validation) field.validation = field.validation.filter((validation)=>"required" !== validation.name);
24
+ if (field.listValidation) field.listValidation = field.listValidation.filter((v)=>"required" !== v.name);
25
+ return field;
26
+ };
27
+ const createUpdateFields = (fields)=>fields.reduce((collection, field)=>{
28
+ collection.push(removeFieldRequiredValidation({
29
+ ...field
30
+ }));
31
+ return collection;
32
+ }, []);
33
+ class FmGraphQLSchema_ {
34
+ constructor(identityContext, listModelsUseCase, fieldRegistry, fileModelProvider){
35
+ this.identityContext = identityContext;
36
+ this.listModelsUseCase = listModelsUseCase;
37
+ this.fieldRegistry = fieldRegistry;
38
+ this.fileModelProvider = fileModelProvider;
39
+ }
40
+ async getSchemaKey() {
41
+ const models = await this.loadModels();
42
+ const fileModel = await this.fileModelProvider.get();
43
+ const modelKey = createModelSchemaKey([
44
+ fileModel
45
+ ], models);
46
+ return `FileManager:${modelKey}`;
47
+ }
48
+ async execute(builder) {
49
+ this.addBaseTypeDefs(builder);
50
+ await this.addFileTypeDefs(builder);
51
+ this.addSettingsResolvers(builder);
52
+ this.addFileQueryResolvers(builder);
53
+ this.addFileMutationResolvers(builder);
54
+ return builder;
55
+ }
56
+ addBaseTypeDefs(builder) {
57
+ builder.addTypeDefs(`
58
+ type FmError {
59
+ code: String
60
+ message: String
61
+ data: JSON
62
+ stack: String
63
+ }
64
+
65
+ type FmCreatedBy {
66
+ id: ID
67
+ displayName: String
68
+ type: String
69
+ }
70
+
71
+ type FmListMeta {
72
+ cursor: String
73
+ totalCount: Int
74
+ hasMoreItems: Boolean
75
+ }
76
+
77
+ type FmBooleanResponse {
78
+ data: Boolean
79
+ error: FmError
80
+ }
81
+
82
+ type FmSettings {
83
+ uploadMinFileSize: Number
84
+ uploadMaxFileSize: Number
85
+ srcPrefix: String
86
+ }
87
+
88
+ input FmSettingsInput {
89
+ uploadMinFileSize: Number
90
+ uploadMaxFileSize: Number
91
+ srcPrefix: String
92
+ }
93
+
94
+ type FmSettingsResponse {
95
+ data: FmSettings
96
+ error: FmError
97
+ }
98
+
99
+ type FmDeleteResponse {
100
+ data: Boolean
101
+ error: FmError
102
+ }
103
+
104
+ type FmQuery {
105
+ getSettings: FmSettingsResponse
106
+ }
107
+
108
+ type FmMutation {
109
+ updateSettings(data: FmSettingsInput): FmSettingsResponse
110
+ }
111
+
112
+ extend type Query {
113
+ fileManager: FmQuery
114
+ }
115
+
116
+ extend type Mutation {
117
+ fileManager: FmMutation
118
+ }
119
+ `);
120
+ builder.addResolver({
121
+ path: "Query.fileManager",
122
+ resolver: ()=>()=>({})
123
+ });
124
+ builder.addResolver({
125
+ path: "Mutation.fileManager",
126
+ resolver: ()=>()=>({})
127
+ });
128
+ }
129
+ async addFileTypeDefs(builder) {
130
+ const models = await this.loadModels();
131
+ const fileModel = await this.fileModelProvider.get();
132
+ const { fields } = fileModel;
133
+ const fieldTypes = renderFields({
134
+ models,
135
+ model: fileModel,
136
+ fields,
137
+ type: "manage",
138
+ fieldRegistry: this.fieldRegistry
139
+ });
140
+ const inputCreateFields = renderInputFields({
141
+ models,
142
+ model: fileModel,
143
+ fields,
144
+ fieldRegistry: this.fieldRegistry
145
+ });
146
+ const inputUpdateFields = renderInputFields({
147
+ models,
148
+ model: fileModel,
149
+ fields: createUpdateFields(fields),
150
+ fieldRegistry: this.fieldRegistry
151
+ });
152
+ const listFilterFieldsRender = renderListFilterFields({
153
+ model: fileModel,
154
+ fields: fileModel.fields,
155
+ type: "manage",
156
+ fieldRegistry: this.fieldRegistry,
157
+ excludeFields: [
158
+ "entryId",
159
+ "status"
160
+ ]
161
+ });
162
+ builder.addTypeDefs(`
163
+ type FmFile_Location {
164
+ folderId: ID!
165
+ }
166
+
167
+ input FmFile_LocationInput {
168
+ folderId: ID!
169
+ }
170
+
171
+ input FmFile_LocationWhereInput {
172
+ folderId: ID
173
+ folderId_in: [ID!]
174
+ folderId_not: ID
175
+ folderId_not_in: [ID!]
176
+ }
177
+
178
+ ${fieldTypes.map((f)=>f.typeDefs).join("\n")}
179
+
180
+ type FmFile {
181
+ id: ID!
182
+ createdOn: DateTime!
183
+ modifiedOn: DateTime
184
+ savedOn: DateTime!
185
+ createdBy: FmCreatedBy!
186
+ modifiedBy: FmCreatedBy
187
+ savedBy: FmCreatedBy!
188
+ location: FmFile_Location!
189
+ src: String
190
+ ${fieldTypes.map((f)=>f.fields).join("\n")}
191
+ }
192
+
193
+ ${inputCreateFields.map((f)=>f.typeDefs).join("\n")}
194
+
195
+ input FmCreatedByInput {
196
+ id: ID!
197
+ displayName: String!
198
+ type: String!
199
+ }
200
+
201
+ input FmFileCreateInput {
202
+ id: ID!
203
+ createdOn: DateTime
204
+ modifiedOn: DateTime
205
+ savedOn: DateTime
206
+ createdBy: FmCreatedByInput
207
+ modifiedBy: FmCreatedByInput
208
+ savedBy: FmCreatedByInput
209
+ location: FmFile_LocationInput
210
+ ${inputCreateFields.map((f)=>f.fields).join("\n")}
211
+ }
212
+
213
+ input FmFileUpdateInput {
214
+ createdOn: DateTime
215
+ modifiedOn: DateTime
216
+ savedOn: DateTime
217
+ createdBy: FmCreatedByInput
218
+ modifiedBy: FmCreatedByInput
219
+ savedBy: FmCreatedByInput
220
+ location: FmFile_LocationInput
221
+ ${inputUpdateFields.map((f)=>f.fields).join("\n")}
222
+ }
223
+
224
+ type FmFileResponse {
225
+ data: FmFile
226
+ error: FmError
227
+ }
228
+
229
+ input FmFileListWhereInput {
230
+ ${listFilterFieldsRender.allFiltersAsString()}
231
+ location: FmFile_LocationWhereInput
232
+ AND: [FmFileListWhereInput!]
233
+ OR: [FmFileListWhereInput!]
234
+ }
235
+
236
+ type FmFileListResponse {
237
+ data: [FmFile!]
238
+ error: FmError
239
+ meta: FmListMeta
240
+ }
241
+
242
+ enum FmFileListSorter {
243
+ savedOn_ASC
244
+ savedOn_DESC
245
+ createdOn_ASC
246
+ createdOn_DESC
247
+ name_ASC
248
+ name_DESC
249
+ key_ASC
250
+ key_DESC
251
+ type_ASC
252
+ type_DESC
253
+ size_ASC
254
+ size_DESC
255
+ }
256
+
257
+ input FmTagsListWhereInput {
258
+ createdBy: String
259
+ tags_startsWith: String
260
+ tags_not_startsWith: String
261
+ }
262
+
263
+ type FmTag {
264
+ tag: String!
265
+ count: Number!
266
+ }
267
+
268
+ type FmTagsListResponse {
269
+ data: [FmTag!]
270
+ error: FmError
271
+ }
272
+
273
+ type FmCreateFilesResponse {
274
+ data: [FmFile!]
275
+ error: FmError
276
+ }
277
+
278
+ type FmFileModelResponse {
279
+ data: JSON
280
+ error: FmError
281
+ }
282
+
283
+ extend type FmQuery {
284
+ getFileModel: FmFileModelResponse!
285
+ getFile(id: ID!): FmFileResponse!
286
+ getFileByUrl(url: String!): FmFileResponse
287
+ listFiles(
288
+ search: String
289
+ where: FmFileListWhereInput
290
+ limit: Int
291
+ after: String
292
+ sort: [FmFileListSorter!]
293
+ ): FmFileListResponse!
294
+ listTags(where: FmTagsListWhereInput): FmTagsListResponse!
295
+ }
296
+
297
+ extend type FmMutation {
298
+ createFile(data: FmFileCreateInput!): FmFileResponse!
299
+ createFiles(data: [FmFileCreateInput!]!): FmCreateFilesResponse!
300
+ updateFile(id: ID!, data: FmFileUpdateInput!): FmFileResponse!
301
+ deleteFile(id: ID!): FmBooleanResponse!
302
+ }
303
+ `);
304
+ }
305
+ addSettingsResolvers(builder) {
306
+ builder.addResolver({
307
+ path: "FmQuery.getSettings",
308
+ dependencies: [
309
+ GetSettingsUseCase
310
+ ],
311
+ resolver: (getSettings)=>async ()=>{
312
+ const result = await getSettings.execute();
313
+ if (result.isFail()) return new ErrorResponse(result.error);
314
+ return new Response(result.value);
315
+ }
316
+ });
317
+ builder.addResolver({
318
+ path: "FmMutation.updateSettings",
319
+ dependencies: [
320
+ UpdateSettingsUseCase
321
+ ],
322
+ resolver: (updateSettings)=>async ({ args })=>{
323
+ const result = await updateSettings.execute(args.data);
324
+ if (result.isFail()) return new ErrorResponse(result.error);
325
+ return new Response(result.value);
326
+ }
327
+ });
328
+ }
329
+ addFileQueryResolvers(builder) {
330
+ builder.addResolver({
331
+ path: "FmFile.src",
332
+ dependencies: [
333
+ FileUrlGenerator
334
+ ],
335
+ resolver: (urlGenerator)=>({ parent })=>urlGenerator.generateUrl(parent)
336
+ });
337
+ builder.addResolver({
338
+ path: "FmQuery.getFileModel",
339
+ dependencies: [
340
+ FileModelProvider
341
+ ],
342
+ resolver: (fileModelProvider)=>async ()=>new Response(await fileModelProvider.get())
343
+ });
344
+ builder.addResolver({
345
+ path: "FmQuery.getFile",
346
+ dependencies: [
347
+ GetFileUseCase
348
+ ],
349
+ resolver: (getFile)=>async ({ args })=>{
350
+ const result = await getFile.execute(args.id);
351
+ if (result.isFail()) return new ErrorResponse(result.error);
352
+ return new Response(result.value);
353
+ }
354
+ });
355
+ builder.addResolver({
356
+ path: "FmQuery.listFiles",
357
+ dependencies: [
358
+ ListFilesUseCase
359
+ ],
360
+ resolver: (listFiles)=>async ({ args })=>{
361
+ const result = await listFiles.execute(args);
362
+ if (result.isFail()) return new ErrorResponse(result.error);
363
+ return new ListResponse(result.value.items, result.value.meta);
364
+ }
365
+ });
366
+ builder.addResolver({
367
+ path: "FmQuery.listTags",
368
+ dependencies: [
369
+ ListTagsUseCase
370
+ ],
371
+ resolver: (listTags)=>async ({ args })=>{
372
+ const result = await listTags.execute(args || {});
373
+ if (result.isFail()) return new ErrorResponse(result.error);
374
+ return new Response(result.value);
375
+ }
376
+ });
377
+ builder.addResolver({
378
+ path: "FmQuery.getFileByUrl",
379
+ dependencies: [
380
+ GetFileByUrlUseCase
381
+ ],
382
+ resolver: (getFileByUrl)=>async ({ args })=>{
383
+ const result = await getFileByUrl.execute(args.url);
384
+ if (result.isFail()) return new ErrorResponse(result.error);
385
+ if (!result.value) return new NotFoundResponse("File not found!");
386
+ return new Response(result.value);
387
+ }
388
+ });
389
+ }
390
+ addFileMutationResolvers(builder) {
391
+ builder.addResolver({
392
+ path: "FmMutation.createFile",
393
+ dependencies: [
394
+ CreateFileUseCase
395
+ ],
396
+ resolver: (createFile)=>async ({ args })=>{
397
+ const result = await createFile.execute(args.data);
398
+ if (result.isFail()) return new ErrorResponse(result.error);
399
+ return new Response(result.value);
400
+ }
401
+ });
402
+ builder.addResolver({
403
+ path: "FmMutation.createFiles",
404
+ dependencies: [
405
+ CreateFilesInBatchUseCase
406
+ ],
407
+ resolver: (createFilesInBatch)=>async ({ args })=>{
408
+ const result = await createFilesInBatch.execute({
409
+ files: args.data,
410
+ meta: args.meta
411
+ });
412
+ if (result.isFail()) return new ErrorResponse(result.error);
413
+ return new Response(result.value);
414
+ }
415
+ });
416
+ builder.addResolver({
417
+ path: "FmMutation.updateFile",
418
+ dependencies: [
419
+ UpdateFileUseCase
420
+ ],
421
+ resolver: (updateFile)=>async ({ args })=>{
422
+ const result = await updateFile.execute({
423
+ id: args.id,
424
+ ...args.data
425
+ });
426
+ if (result.isFail()) return new ErrorResponse(result.error);
427
+ return new Response(result.value);
428
+ }
429
+ });
430
+ builder.addResolver({
431
+ path: "FmMutation.deleteFile",
432
+ dependencies: [
433
+ DeleteFileUseCase
434
+ ],
435
+ resolver: (deleteFile)=>async ({ args })=>{
436
+ const result = await deleteFile.execute(args.id);
437
+ if (result.isFail()) return new ErrorResponse(result.error);
438
+ return new Response(true);
439
+ }
440
+ });
441
+ }
442
+ async loadModels() {
443
+ const modelsResult = await this.identityContext.withoutAuthorization(()=>this.listModelsUseCase.execute());
444
+ if (modelsResult.isFail()) throw modelsResult.error;
445
+ return modelsResult.value;
446
+ }
447
+ }
448
+ const FmGraphQLSchema = GraphQLSchemaFactory.createImplementation({
449
+ implementation: FmGraphQLSchema_,
450
+ dependencies: [
451
+ IdentityContext,
452
+ ListModelsUseCase,
453
+ CmsModelFieldToGraphQLRegistry,
454
+ FileModelProvider
455
+ ]
456
+ });
457
+ export { FmGraphQLSchema };
458
+
459
+ //# sourceMappingURL=FmGraphQLSchema.js.map