@webiny/api-file-manager 6.6.0-alpha.0 → 6.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/FileManagerAppFeature.js +4 -4
  2. package/FileManagerAppFeature.js.map +1 -1
  3. package/delivery/AssetDelivery/AssetRequest.d.ts +1 -1
  4. package/delivery/AssetDelivery/AssetRequest.js.map +1 -1
  5. package/delivery/AssetDeliveryRoute.d.ts +15 -6
  6. package/delivery/AssetDeliveryRoute.js +25 -32
  7. package/delivery/AssetDeliveryRoute.js.map +1 -1
  8. package/domain/file/abstractions.d.ts +13 -5
  9. package/domain/file/abstractions.js +2 -2
  10. package/domain/file/abstractions.js.map +1 -1
  11. package/domain/file/file.model.d.ts +3 -3
  12. package/domain/file/file.model.js +10 -6
  13. package/domain/file/file.model.js.map +1 -1
  14. package/features/assetDelivery/abstractions/AssetType.d.ts +17 -0
  15. package/features/assetDelivery/abstractions/AssetType.js +5 -0
  16. package/features/assetDelivery/abstractions/AssetType.js.map +1 -0
  17. package/features/assetDelivery/{transformation → assetTypes/image}/AssetKeyGenerator.d.ts +5 -2
  18. package/features/assetDelivery/assetTypes/image/AssetKeyGenerator.js +30 -0
  19. package/features/assetDelivery/assetTypes/image/AssetKeyGenerator.js.map +1 -0
  20. package/features/assetDelivery/assetTypes/image/ImageAssetType.d.ts +9 -0
  21. package/features/assetDelivery/assetTypes/image/ImageAssetType.js +18 -0
  22. package/features/assetDelivery/assetTypes/image/ImageAssetType.js.map +1 -0
  23. package/features/assetDelivery/assetTypes/image/ImageAssetTypeHandler.d.ts +5 -0
  24. package/features/assetDelivery/assetTypes/image/ImageAssetTypeHandler.js +5 -0
  25. package/features/assetDelivery/assetTypes/image/ImageAssetTypeHandler.js.map +1 -0
  26. package/features/assetDelivery/assetTypes/image/SharpTransformer.d.ts +18 -0
  27. package/features/assetDelivery/assetTypes/image/SharpTransformer.js +47 -0
  28. package/features/assetDelivery/assetTypes/image/SharpTransformer.js.map +1 -0
  29. package/features/assetDelivery/assetTypes/image/WidthCollection.js.map +1 -0
  30. package/features/assetDelivery/assetTypes/image/imageFormat.d.ts +26 -0
  31. package/features/assetDelivery/assetTypes/image/imageFormat.js +51 -0
  32. package/features/assetDelivery/assetTypes/image/imageFormat.js.map +1 -0
  33. package/features/assetDelivery/assetTypes/image/imageTypes.d.ts +39 -0
  34. package/features/assetDelivery/assetTypes/image/imageTypes.js +0 -0
  35. package/features/assetDelivery/assetTypes/image/index.d.ts +5 -0
  36. package/features/assetDelivery/assetTypes/image/index.js +4 -0
  37. package/features/assetDelivery/assetTypes/image/normalizeImageOptions.d.ts +6 -0
  38. package/features/assetDelivery/assetTypes/image/normalizeImageOptions.js +56 -0
  39. package/features/assetDelivery/assetTypes/image/normalizeImageOptions.js.map +1 -0
  40. package/features/assetDelivery/assetTypes/image/transformImage.d.ts +59 -0
  41. package/features/assetDelivery/assetTypes/image/transformImage.js +146 -0
  42. package/features/assetDelivery/assetTypes/image/transformImage.js.map +1 -0
  43. package/features/assetDelivery/assetTypes/image/utils.d.ts +26 -0
  44. package/features/assetDelivery/assetTypes/image/utils.js +47 -0
  45. package/features/assetDelivery/assetTypes/image/utils.js.map +1 -0
  46. package/features/assetDelivery/feature.js +7 -7
  47. package/features/assetDelivery/feature.js.map +1 -1
  48. package/features/assetDelivery/privateFiles/PrivateFilesAssetProcessor.js.map +1 -1
  49. package/features/assetDelivery/transformation/TransformationAssetProcessor.d.ts +4 -6
  50. package/features/assetDelivery/transformation/TransformationAssetProcessor.js +13 -11
  51. package/features/assetDelivery/transformation/TransformationAssetProcessor.js.map +1 -1
  52. package/features/assetDelivery/transformation/index.d.ts +4 -3
  53. package/features/assetDelivery/transformation/index.js +3 -3
  54. package/features/file/CreateFile/CreateFileRepository.d.ts +3 -3
  55. package/features/file/CreateFile/CreateFileRepository.js +6 -5
  56. package/features/file/CreateFile/CreateFileRepository.js.map +1 -1
  57. package/features/file/DeleteFile/DeleteFileRepository.d.ts +3 -3
  58. package/features/file/DeleteFile/DeleteFileRepository.js +6 -5
  59. package/features/file/DeleteFile/DeleteFileRepository.js.map +1 -1
  60. package/features/file/FileModelProvider.d.ts +31 -0
  61. package/features/file/FileModelProvider.js +22 -0
  62. package/features/file/FileModelProvider.js.map +1 -0
  63. package/features/file/GetFile/GetFileRepository.d.ts +3 -3
  64. package/features/file/GetFile/GetFileRepository.js +6 -5
  65. package/features/file/GetFile/GetFileRepository.js.map +1 -1
  66. package/features/file/ListFiles/ListFilesRepository.d.ts +3 -3
  67. package/features/file/ListFiles/ListFilesRepository.js +8 -7
  68. package/features/file/ListFiles/ListFilesRepository.js.map +1 -1
  69. package/features/file/ListImagesByTagTool/ListImagesByTagTool.d.ts +5 -0
  70. package/features/file/ListImagesByTagTool/ListImagesByTagTool.js +5 -0
  71. package/features/file/ListImagesByTagTool/ListImagesByTagTool.js.map +1 -1
  72. package/features/file/ListTags/ListTagsRepository.d.ts +3 -3
  73. package/features/file/ListTags/ListTagsRepository.js +7 -6
  74. package/features/file/ListTags/ListTagsRepository.js.map +1 -1
  75. package/features/file/UpdateFile/UpdateFileRepository.d.ts +3 -3
  76. package/features/file/UpdateFile/UpdateFileRepository.js +6 -5
  77. package/features/file/UpdateFile/UpdateFileRepository.js.map +1 -1
  78. package/features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.d.ts +11 -0
  79. package/features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.js +22 -0
  80. package/features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.js.map +1 -0
  81. package/features/upload/WriteFileMetadata/feature.js +2 -0
  82. package/features/upload/WriteFileMetadata/feature.js.map +1 -1
  83. package/graphql/FmGraphQLSchema.d.ts +3 -3
  84. package/graphql/FmGraphQLSchema.js +13 -12
  85. package/graphql/FmGraphQLSchema.js.map +1 -1
  86. package/package.json +17 -18
  87. package/features/FileModelContextualSchema.d.ts +0 -13
  88. package/features/FileModelContextualSchema.js +0 -31
  89. package/features/FileModelContextualSchema.js.map +0 -1
  90. package/features/assetDelivery/transformation/AssetKeyGenerator.js +0 -24
  91. package/features/assetDelivery/transformation/AssetKeyGenerator.js.map +0 -1
  92. package/features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.d.ts +0 -9
  93. package/features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.js +0 -13
  94. package/features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.js.map +0 -1
  95. package/features/assetDelivery/transformation/WidthCollection.js.map +0 -1
  96. package/features/assetDelivery/transformation/utils.d.ts +0 -9
  97. package/features/assetDelivery/transformation/utils.js +0 -31
  98. package/features/assetDelivery/transformation/utils.js.map +0 -1
  99. /package/features/assetDelivery/{transformation → assetTypes/image}/WidthCollection.d.ts +0 -0
  100. /package/features/assetDelivery/{transformation → assetTypes/image}/WidthCollection.js +0 -0
@@ -1,18 +1,19 @@
1
1
  import { Result } from "@webiny/feature/api";
2
2
  import { UpdateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/UpdateEntry";
3
3
  import { UpdateFileRepository } from "./abstractions.js";
4
- import { FileModel } from "../../../domain/file/abstractions.js";
4
+ import { FileModelProvider } from "../../../domain/file/abstractions.js";
5
5
  import { FileNotAuthorizedError, FileNotFoundError, FilePersistenceError } from "../../../domain/file/errors.js";
6
6
  import { FileToEntryMapper } from "../shared/FileToEntryMapper.js";
7
7
  class UpdateFileRepositoryImpl {
8
- constructor(updateEntry, fileModel){
8
+ constructor(updateEntry, fileModelProvider){
9
9
  this.updateEntry = updateEntry;
10
- this.fileModel = fileModel;
10
+ this.fileModelProvider = fileModelProvider;
11
11
  }
12
12
  async update(file) {
13
13
  const entry = FileToEntryMapper.toEntry(file);
14
14
  const id = `${file.id}#0001`;
15
- const result = await this.updateEntry.execute(this.fileModel, id, {
15
+ const fileModel = await this.fileModelProvider.get();
16
+ const result = await this.updateEntry.execute(fileModel, id, {
16
17
  wbyAco_location: file.location,
17
18
  values: entry.values
18
19
  });
@@ -29,7 +30,7 @@ const UpdateFileRepository_UpdateFileRepository = UpdateFileRepository.createImp
29
30
  implementation: UpdateFileRepositoryImpl,
30
31
  dependencies: [
31
32
  UpdateEntryUseCase,
32
- FileModel
33
+ FileModelProvider
33
34
  ]
34
35
  });
35
36
  export { UpdateFileRepository_UpdateFileRepository as UpdateFileRepository };
@@ -1 +1 @@
1
- {"version":3,"file":"features/file/UpdateFile/UpdateFileRepository.js","sources":["../../../../src/features/file/UpdateFile/UpdateFileRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { UpdateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/UpdateEntry\";\nimport { UpdateFileRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { FileModel } from \"~/domain/file/abstractions.js\";\nimport type { File } from \"~/domain/file/types.js\";\nimport {\n FileNotAuthorizedError,\n FileNotFoundError,\n FilePersistenceError\n} from \"~/domain/file/errors.js\";\nimport { FileToEntryMapper } from \"../shared/FileToEntryMapper.js\";\n\nclass UpdateFileRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private updateEntry: UpdateEntryUseCase.Interface,\n private fileModel: FileModel.Interface\n ) {}\n\n async update(file: File): Promise<Result<void, RepositoryAbstraction.Error>> {\n const entry = FileToEntryMapper.toEntry(file);\n\n // Files are not versioned, so we're always updating the same revision\n const id = `${file.id}#0001`;\n\n const result = await this.updateEntry.execute(this.fileModel, id, {\n wbyAco_location: file.location,\n values: entry.values\n });\n\n if (result.isFail()) {\n const error = result.error;\n if (error.code === \"Cms/Entry/NotFound\") {\n return Result.fail(new FileNotFoundError(id));\n }\n\n if (error.code === \"Cms/Entry/NotAuthorized\") {\n return Result.fail(new FileNotAuthorizedError());\n }\n\n return Result.fail(new FilePersistenceError(result.error));\n }\n\n return Result.ok();\n }\n}\n\nexport const UpdateFileRepository = RepositoryAbstraction.createImplementation({\n implementation: UpdateFileRepositoryImpl,\n dependencies: [UpdateEntryUseCase, FileModel]\n});\n"],"names":["UpdateFileRepositoryImpl","updateEntry","fileModel","file","entry","FileToEntryMapper","id","result","error","Result","FileNotFoundError","FileNotAuthorizedError","FilePersistenceError","UpdateFileRepository","RepositoryAbstraction","UpdateEntryUseCase","FileModel"],"mappings":";;;;;;AAYA,MAAMA;IACF,YACYC,WAAyC,EACzCC,SAA8B,CACxC;aAFUD,WAAW,GAAXA;aACAC,SAAS,GAATA;IACT;IAEH,MAAM,OAAOC,IAAU,EAAsD;QACzE,MAAMC,QAAQC,kBAAkB,OAAO,CAACF;QAGxC,MAAMG,KAAK,GAAGH,KAAK,EAAE,CAAC,KAAK,CAAC;QAE5B,MAAMI,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAED,IAAI;YAC9D,iBAAiBH,KAAK,QAAQ;YAC9B,QAAQC,MAAM,MAAM;QACxB;QAEA,IAAIG,OAAO,MAAM,IAAI;YACjB,MAAMC,QAAQD,OAAO,KAAK;YAC1B,IAAIC,AAAe,yBAAfA,MAAM,IAAI,EACV,OAAOC,OAAO,IAAI,CAAC,IAAIC,kBAAkBJ;YAG7C,IAAIE,AAAe,8BAAfA,MAAM,IAAI,EACV,OAAOC,OAAO,IAAI,CAAC,IAAIE;YAG3B,OAAOF,OAAO,IAAI,CAAC,IAAIG,qBAAqBL,OAAO,KAAK;QAC5D;QAEA,OAAOE,OAAO,EAAE;IACpB;AACJ;AAEO,MAAMI,4CAAuBC,qBAAAA,oBAA0C,CAAC;IAC3E,gBAAgBd;IAChB,cAAc;QAACe;QAAoBC;KAAU;AACjD"}
1
+ {"version":3,"file":"features/file/UpdateFile/UpdateFileRepository.js","sources":["../../../../src/features/file/UpdateFile/UpdateFileRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { UpdateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/UpdateEntry\";\nimport { UpdateFileRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { FileModelProvider } from \"~/domain/file/abstractions.js\";\nimport type { File } from \"~/domain/file/types.js\";\nimport {\n FileNotAuthorizedError,\n FileNotFoundError,\n FilePersistenceError\n} from \"~/domain/file/errors.js\";\nimport { FileToEntryMapper } from \"../shared/FileToEntryMapper.js\";\n\nclass UpdateFileRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private updateEntry: UpdateEntryUseCase.Interface,\n private fileModelProvider: FileModelProvider.Interface\n ) {}\n\n async update(file: File): Promise<Result<void, RepositoryAbstraction.Error>> {\n const entry = FileToEntryMapper.toEntry(file);\n\n // Files are not versioned, so we're always updating the same revision\n const id = `${file.id}#0001`;\n\n const fileModel = await this.fileModelProvider.get();\n const result = await this.updateEntry.execute(fileModel, id, {\n wbyAco_location: file.location,\n values: entry.values\n });\n\n if (result.isFail()) {\n const error = result.error;\n if (error.code === \"Cms/Entry/NotFound\") {\n return Result.fail(new FileNotFoundError(id));\n }\n\n if (error.code === \"Cms/Entry/NotAuthorized\") {\n return Result.fail(new FileNotAuthorizedError());\n }\n\n return Result.fail(new FilePersistenceError(result.error));\n }\n\n return Result.ok();\n }\n}\n\nexport const UpdateFileRepository = RepositoryAbstraction.createImplementation({\n implementation: UpdateFileRepositoryImpl,\n dependencies: [UpdateEntryUseCase, FileModelProvider]\n});\n"],"names":["UpdateFileRepositoryImpl","updateEntry","fileModelProvider","file","entry","FileToEntryMapper","id","fileModel","result","error","Result","FileNotFoundError","FileNotAuthorizedError","FilePersistenceError","UpdateFileRepository","RepositoryAbstraction","UpdateEntryUseCase","FileModelProvider"],"mappings":";;;;;;AAYA,MAAMA;IACF,YACYC,WAAyC,EACzCC,iBAA8C,CACxD;aAFUD,WAAW,GAAXA;aACAC,iBAAiB,GAAjBA;IACT;IAEH,MAAM,OAAOC,IAAU,EAAsD;QACzE,MAAMC,QAAQC,kBAAkB,OAAO,CAACF;QAGxC,MAAMG,KAAK,GAAGH,KAAK,EAAE,CAAC,KAAK,CAAC;QAE5B,MAAMI,YAAY,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG;QAClD,MAAMC,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACD,WAAWD,IAAI;YACzD,iBAAiBH,KAAK,QAAQ;YAC9B,QAAQC,MAAM,MAAM;QACxB;QAEA,IAAII,OAAO,MAAM,IAAI;YACjB,MAAMC,QAAQD,OAAO,KAAK;YAC1B,IAAIC,AAAe,yBAAfA,MAAM,IAAI,EACV,OAAOC,OAAO,IAAI,CAAC,IAAIC,kBAAkBL;YAG7C,IAAIG,AAAe,8BAAfA,MAAM,IAAI,EACV,OAAOC,OAAO,IAAI,CAAC,IAAIE;YAG3B,OAAOF,OAAO,IAAI,CAAC,IAAIG,qBAAqBL,OAAO,KAAK;QAC5D;QAEA,OAAOE,OAAO,EAAE;IACpB;AACJ;AAEO,MAAMI,4CAAuBC,qBAAAA,oBAA0C,CAAC;IAC3E,gBAAgBf;IAChB,cAAc;QAACgB;QAAoBC;KAAkB;AACzD"}
@@ -0,0 +1,11 @@
1
+ import { FileAfterUpdateEventHandler } from "../../../features/file/UpdateFile/events.js";
2
+ import { MetadataWriter } from "./abstractions.js";
3
+ declare class WriteMetadataAfterUpdateHandlerImpl implements FileAfterUpdateEventHandler.Interface {
4
+ private readonly metadataWriter;
5
+ constructor(metadataWriter: MetadataWriter.Interface);
6
+ handle(event: FileAfterUpdateEventHandler.Event): Promise<void>;
7
+ }
8
+ export declare const WriteMetadataAfterUpdateHandler: typeof WriteMetadataAfterUpdateHandlerImpl & {
9
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher/abstractions.js").IEventHandler<import("~/features/file/UpdateFile/events.js").FileAfterUpdateEvent>>;
10
+ };
11
+ export {};
@@ -0,0 +1,22 @@
1
+ import { FileAfterUpdateEventHandler } from "../../file/UpdateFile/events.js";
2
+ import { MetadataWriter } from "./abstractions.js";
3
+ class WriteMetadataAfterUpdateHandlerImpl {
4
+ constructor(metadataWriter){
5
+ this.metadataWriter = metadataWriter;
6
+ }
7
+ async handle(event) {
8
+ const { file } = event.payload;
9
+ await this.metadataWriter.write([
10
+ file
11
+ ]);
12
+ }
13
+ }
14
+ const WriteMetadataAfterUpdateHandler = FileAfterUpdateEventHandler.createImplementation({
15
+ implementation: WriteMetadataAfterUpdateHandlerImpl,
16
+ dependencies: [
17
+ MetadataWriter
18
+ ]
19
+ });
20
+ export { WriteMetadataAfterUpdateHandler };
21
+
22
+ //# sourceMappingURL=WriteMetadataAfterUpdateHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.js","sources":["../../../../src/features/upload/WriteFileMetadata/WriteMetadataAfterUpdateHandler.ts"],"sourcesContent":["import { FileAfterUpdateEventHandler } from \"~/features/file/UpdateFile/events.js\";\nimport { MetadataWriter } from \"./abstractions.js\";\n\nclass WriteMetadataAfterUpdateHandlerImpl implements FileAfterUpdateEventHandler.Interface {\n private readonly metadataWriter: MetadataWriter.Interface;\n\n public constructor(metadataWriter: MetadataWriter.Interface) {\n this.metadataWriter = metadataWriter;\n }\n\n public async handle(event: FileAfterUpdateEventHandler.Event): Promise<void> {\n const { file } = event.payload;\n // Re-write the delivery metadata so changes (e.g. the image crop) propagate\n // to the asset-delivery pipeline.\n await this.metadataWriter.write([file]);\n }\n}\n\nexport const WriteMetadataAfterUpdateHandler = FileAfterUpdateEventHandler.createImplementation({\n implementation: WriteMetadataAfterUpdateHandlerImpl,\n dependencies: [MetadataWriter]\n});\n"],"names":["WriteMetadataAfterUpdateHandlerImpl","metadataWriter","event","file","WriteMetadataAfterUpdateHandler","FileAfterUpdateEventHandler","MetadataWriter"],"mappings":";;AAGA,MAAMA;IAGF,YAAmBC,cAAwC,CAAE;QACzD,IAAI,CAAC,cAAc,GAAGA;IAC1B;IAEA,MAAa,OAAOC,KAAwC,EAAiB;QACzE,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAM,OAAO;QAG9B,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YAACC;SAAK;IAC1C;AACJ;AAEO,MAAMC,kCAAkCC,4BAA4B,oBAAoB,CAAC;IAC5F,gBAAgBL;IAChB,cAAc;QAACM;KAAe;AAClC"}
@@ -2,12 +2,14 @@ import { createFeature } from "@webiny/feature/api";
2
2
  import { MetadataWriter } from "./MetadataWriter.js";
3
3
  import { WriteMetadataAfterCreateHandler } from "./WriteMetadataAfterCreateHandler.js";
4
4
  import { WriteMetadataAfterBatchCreateHandler } from "./WriteMetadataAfterBatchCreateHandler.js";
5
+ import { WriteMetadataAfterUpdateHandler } from "./WriteMetadataAfterUpdateHandler.js";
5
6
  const WriteFileMetadataFeature = createFeature({
6
7
  name: "FileManager/WriteFileMetadata",
7
8
  register (container) {
8
9
  container.register(MetadataWriter);
9
10
  container.register(WriteMetadataAfterCreateHandler);
10
11
  container.register(WriteMetadataAfterBatchCreateHandler);
12
+ container.register(WriteMetadataAfterUpdateHandler);
11
13
  }
12
14
  });
13
15
  export { WriteFileMetadataFeature };
@@ -1 +1 @@
1
- {"version":3,"file":"features/upload/WriteFileMetadata/feature.js","sources":["../../../../src/features/upload/WriteFileMetadata/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { MetadataWriter } from \"./MetadataWriter.js\";\nimport { WriteMetadataAfterCreateHandler } from \"./WriteMetadataAfterCreateHandler.js\";\nimport { WriteMetadataAfterBatchCreateHandler } from \"./WriteMetadataAfterBatchCreateHandler.js\";\n\nexport const WriteFileMetadataFeature = createFeature({\n name: \"FileManager/WriteFileMetadata\",\n register(container) {\n container.register(MetadataWriter);\n container.register(WriteMetadataAfterCreateHandler);\n container.register(WriteMetadataAfterBatchCreateHandler);\n }\n});\n"],"names":["WriteFileMetadataFeature","createFeature","container","MetadataWriter","WriteMetadataAfterCreateHandler","WriteMetadataAfterBatchCreateHandler"],"mappings":";;;;AAKO,MAAMA,2BAA2BC,cAAc;IAClD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;IACvB;AACJ"}
1
+ {"version":3,"file":"features/upload/WriteFileMetadata/feature.js","sources":["../../../../src/features/upload/WriteFileMetadata/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { MetadataWriter } from \"./MetadataWriter.js\";\nimport { WriteMetadataAfterCreateHandler } from \"./WriteMetadataAfterCreateHandler.js\";\nimport { WriteMetadataAfterBatchCreateHandler } from \"./WriteMetadataAfterBatchCreateHandler.js\";\nimport { WriteMetadataAfterUpdateHandler } from \"./WriteMetadataAfterUpdateHandler.js\";\n\nexport const WriteFileMetadataFeature = createFeature({\n name: \"FileManager/WriteFileMetadata\",\n register(container) {\n container.register(MetadataWriter);\n container.register(WriteMetadataAfterCreateHandler);\n container.register(WriteMetadataAfterBatchCreateHandler);\n container.register(WriteMetadataAfterUpdateHandler);\n }\n});\n"],"names":["WriteFileMetadataFeature","createFeature","container","MetadataWriter","WriteMetadataAfterCreateHandler","WriteMetadataAfterBatchCreateHandler","WriteMetadataAfterUpdateHandler"],"mappings":";;;;;AAMO,MAAMA,2BAA2BC,cAAc;IAClD,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;IACvB;AACJ"}
@@ -3,14 +3,14 @@ import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentMode
3
3
  import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js";
4
4
  import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
5
5
  import { FileUrlGenerator } from "../features/file/FileUrlGenerator/abstractions.js";
6
- import { FileModel } from "../domain/file/abstractions.js";
6
+ import { FileModelProvider } from "../domain/file/abstractions.js";
7
7
  declare class FmGraphQLSchema_ implements GraphQLSchemaFactory.Interface {
8
8
  private readonly identityContext;
9
9
  private readonly listModelsUseCase;
10
10
  private readonly fieldRegistry;
11
- private readonly fileModel;
11
+ private readonly fileModelProvider;
12
12
  private readonly fileUrlGenerator;
13
- constructor(identityContext: IdentityContext.Interface, listModelsUseCase: ListModelsUseCase.Interface, fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface, fileModel: FileModel.Interface, fileUrlGenerator: FileUrlGenerator.Interface);
13
+ constructor(identityContext: IdentityContext.Interface, listModelsUseCase: ListModelsUseCase.Interface, fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface, fileModelProvider: FileModelProvider.Interface, fileUrlGenerator: FileUrlGenerator.Interface);
14
14
  execute(builder: GraphQLSchemaFactory.SchemaBuilder): Promise<GraphQLSchemaFactory.SchemaBuilder>;
15
15
  private addBaseTypeDefs;
16
16
  private addFileTypeDefs;
@@ -17,7 +17,7 @@ import { GetFileByUrlUseCase } from "../features/file/GetFileByUrl/abstractions.
17
17
  import { GetSettingsUseCase } from "../features/settings/GetSettings/abstractions.js";
18
18
  import { UpdateSettingsUseCase } from "../features/settings/UpdateSettings/abstractions.js";
19
19
  import { FileUrlGenerator } from "../features/file/FileUrlGenerator/abstractions.js";
20
- import { FileModel } from "../domain/file/abstractions.js";
20
+ import { FileModelProvider } from "../domain/file/abstractions.js";
21
21
  const removeFieldRequiredValidation = (field)=>{
22
22
  if (field.validation) field.validation = field.validation.filter((validation)=>"required" !== validation.name);
23
23
  if (field.listValidation) field.listValidation = field.listValidation.filter((v)=>"required" !== v.name);
@@ -30,11 +30,11 @@ const createUpdateFields = (fields)=>fields.reduce((collection, field)=>{
30
30
  return collection;
31
31
  }, []);
32
32
  class FmGraphQLSchema_ {
33
- constructor(identityContext, listModelsUseCase, fieldRegistry, fileModel, fileUrlGenerator){
33
+ constructor(identityContext, listModelsUseCase, fieldRegistry, fileModelProvider, fileUrlGenerator){
34
34
  this.identityContext = identityContext;
35
35
  this.listModelsUseCase = listModelsUseCase;
36
36
  this.fieldRegistry = fieldRegistry;
37
- this.fileModel = fileModel;
37
+ this.fileModelProvider = fileModelProvider;
38
38
  this.fileUrlGenerator = fileUrlGenerator;
39
39
  }
40
40
  async execute(builder) {
@@ -121,29 +121,30 @@ class FmGraphQLSchema_ {
121
121
  }
122
122
  async addFileTypeDefs(builder) {
123
123
  const models = await this.loadModels();
124
- const { fields } = this.fileModel;
124
+ const fileModel = await this.fileModelProvider.get();
125
+ const { fields } = fileModel;
125
126
  const fieldTypes = renderFields({
126
127
  models,
127
- model: this.fileModel,
128
+ model: fileModel,
128
129
  fields,
129
130
  type: "manage",
130
131
  fieldRegistry: this.fieldRegistry
131
132
  });
132
133
  const inputCreateFields = renderInputFields({
133
134
  models,
134
- model: this.fileModel,
135
+ model: fileModel,
135
136
  fields,
136
137
  fieldRegistry: this.fieldRegistry
137
138
  });
138
139
  const inputUpdateFields = renderInputFields({
139
140
  models,
140
- model: this.fileModel,
141
+ model: fileModel,
141
142
  fields: createUpdateFields(fields),
142
143
  fieldRegistry: this.fieldRegistry
143
144
  });
144
145
  const listFilterFieldsRender = renderListFilterFields({
145
- model: this.fileModel,
146
- fields: this.fileModel.fields,
146
+ model: fileModel,
147
+ fields: fileModel.fields,
147
148
  type: "manage",
148
149
  fieldRegistry: this.fieldRegistry,
149
150
  excludeFields: [
@@ -329,9 +330,9 @@ class FmGraphQLSchema_ {
329
330
  builder.addResolver({
330
331
  path: "FmQuery.getFileModel",
331
332
  dependencies: [
332
- FileModel
333
+ FileModelProvider
333
334
  ],
334
- resolver: (fileModel)=>()=>new Response(fileModel)
335
+ resolver: (fileModelProvider)=>async ()=>new Response(await fileModelProvider.get())
335
336
  });
336
337
  builder.addResolver({
337
338
  path: "FmQuery.getFile",
@@ -442,7 +443,7 @@ const FmGraphQLSchema = GraphQLSchemaFactory.createImplementation({
442
443
  IdentityContext,
443
444
  ListModelsUseCase,
444
445
  CmsModelFieldToGraphQLRegistry,
445
- FileModel,
446
+ FileModelProvider,
446
447
  FileUrlGenerator
447
448
  ]
448
449
  });
@@ -1 +1 @@
1
- {"version":3,"file":"graphql/FmGraphQLSchema.js","sources":["../../src/graphql/FmGraphQLSchema.ts"],"sourcesContent":["import { GraphQLSchemaFactory } from \"@webiny/api-graphql/graphql/abstractions.js\";\nimport { ErrorResponse } from \"@webiny/api-graphql\";\nimport { ListResponse } from \"@webiny/api-graphql\";\nimport { NotFoundResponse } from \"@webiny/api-graphql\";\nimport { Response } from \"@webiny/api-graphql\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields.js\";\nimport { renderInputFields } from \"@webiny/api-headless-cms/utils/renderInputFields.js\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { GetFileUseCase } from \"~/features/file/GetFile/abstractions.js\";\nimport { ListFilesUseCase } from \"~/features/file/ListFiles/abstractions.js\";\nimport { ListTagsUseCase } from \"~/features/file/ListTags/abstractions.js\";\nimport { CreateFileUseCase } from \"~/features/file/CreateFile/abstractions.js\";\nimport { CreateFilesInBatchUseCase } from \"~/features/file/CreateFilesInBatch/abstractions.js\";\nimport { UpdateFileUseCase } from \"~/features/file/UpdateFile/abstractions.js\";\nimport { DeleteFileUseCase } from \"~/features/file/DeleteFile/abstractions.js\";\nimport { GetFileByUrlUseCase } from \"~/features/file/GetFileByUrl/abstractions.js\";\nimport { GetSettingsUseCase } from \"~/features/settings/GetSettings/abstractions.js\";\nimport { UpdateSettingsUseCase } from \"~/features/settings/UpdateSettings/abstractions.js\";\nimport { FileUrlGenerator } from \"~/features/file/FileUrlGenerator/abstractions.js\";\nimport { FileModel } from \"~/domain/file/abstractions.js\";\nimport type { CmsModelField } from \"@webiny/api-headless-cms/types/index.js\";\n\nconst removeFieldRequiredValidation = (field: CmsModelField) => {\n if (field.validation) {\n field.validation = field.validation.filter(validation => validation.name !== \"required\");\n }\n if (field.listValidation) {\n field.listValidation = field.listValidation.filter(v => v.name !== \"required\");\n }\n return field;\n};\n\nconst createUpdateFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.reduce<CmsModelField[]>((collection, field) => {\n collection.push(removeFieldRequiredValidation({ ...field }));\n return collection;\n }, []);\n};\n\nclass FmGraphQLSchema_ implements GraphQLSchemaFactory.Interface {\n public constructor(\n private readonly identityContext: IdentityContext.Interface,\n private readonly listModelsUseCase: ListModelsUseCase.Interface,\n private readonly fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface,\n private readonly fileModel: FileModel.Interface,\n private readonly fileUrlGenerator: FileUrlGenerator.Interface\n ) {}\n\n public async execute(\n builder: GraphQLSchemaFactory.SchemaBuilder\n ): Promise<GraphQLSchemaFactory.SchemaBuilder> {\n if (this.fileUrlGenerator.init) {\n await this.fileUrlGenerator.init();\n }\n\n this.addBaseTypeDefs(builder);\n await this.addFileTypeDefs(builder);\n this.addSettingsResolvers(builder);\n this.addFileQueryResolvers(builder);\n this.addFileMutationResolvers(builder);\n\n return builder;\n }\n\n private addBaseTypeDefs(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addTypeDefs(/* GraphQL */ `\n type FmError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type FmCreatedBy {\n id: ID\n displayName: String\n type: String\n }\n\n type FmListMeta {\n cursor: String\n totalCount: Int\n hasMoreItems: Boolean\n }\n\n type FmBooleanResponse {\n data: Boolean\n error: FmError\n }\n\n type FmSettings {\n uploadMinFileSize: Number\n uploadMaxFileSize: Number\n srcPrefix: String\n }\n\n input FmSettingsInput {\n uploadMinFileSize: Number\n uploadMaxFileSize: Number\n srcPrefix: String\n }\n\n type FmSettingsResponse {\n data: FmSettings\n error: FmError\n }\n\n type FmDeleteResponse {\n data: Boolean\n error: FmError\n }\n\n type FmQuery {\n getSettings: FmSettingsResponse\n }\n\n type FmMutation {\n updateSettings(data: FmSettingsInput): FmSettingsResponse\n }\n\n extend type Query {\n fileManager: FmQuery\n }\n\n extend type Mutation {\n fileManager: FmMutation\n }\n `);\n\n builder.addResolver({\n path: \"Query.fileManager\",\n resolver: () => {\n return () => ({});\n }\n });\n\n builder.addResolver({\n path: \"Mutation.fileManager\",\n resolver: () => {\n return () => ({});\n }\n });\n }\n\n private async addFileTypeDefs(builder: GraphQLSchemaFactory.SchemaBuilder): Promise<void> {\n const models = await this.loadModels();\n const { fields } = this.fileModel;\n\n const fieldTypes = renderFields({\n models,\n model: this.fileModel,\n fields,\n type: \"manage\",\n fieldRegistry: this.fieldRegistry\n });\n\n const inputCreateFields = renderInputFields({\n models,\n model: this.fileModel,\n fields,\n fieldRegistry: this.fieldRegistry\n });\n\n const inputUpdateFields = renderInputFields({\n models,\n model: this.fileModel,\n fields: createUpdateFields(fields),\n fieldRegistry: this.fieldRegistry\n });\n\n const listFilterFieldsRender = renderListFilterFields({\n model: this.fileModel,\n fields: this.fileModel.fields,\n type: \"manage\",\n fieldRegistry: this.fieldRegistry,\n excludeFields: [\"entryId\", \"status\"]\n });\n\n builder.addTypeDefs(/* GraphQL */ `\n type FmFile_Location {\n folderId: ID!\n }\n\n input FmFile_LocationInput {\n folderId: ID!\n }\n\n input FmFile_LocationWhereInput {\n folderId: ID\n folderId_in: [ID!]\n folderId_not: ID\n folderId_not_in: [ID!]\n }\n\n ${fieldTypes.map(f => f.typeDefs).join(\"\\n\")}\n\n type FmFile {\n id: ID!\n createdOn: DateTime!\n modifiedOn: DateTime\n savedOn: DateTime!\n createdBy: FmCreatedBy!\n modifiedBy: FmCreatedBy\n savedBy: FmCreatedBy!\n location: FmFile_Location!\n src: String\n ${fieldTypes.map(f => f.fields).join(\"\\n\")}\n }\n\n ${inputCreateFields.map(f => f.typeDefs).join(\"\\n\")}\n\n input FmCreatedByInput {\n id: ID!\n displayName: String!\n type: String!\n }\n\n input FmFileCreateInput {\n id: ID!\n createdOn: DateTime\n modifiedOn: DateTime\n savedOn: DateTime\n createdBy: FmCreatedByInput\n modifiedBy: FmCreatedByInput\n savedBy: FmCreatedByInput\n location: FmFile_LocationInput\n ${inputCreateFields.map(f => f.fields).join(\"\\n\")}\n }\n\n input FmFileUpdateInput {\n createdOn: DateTime\n modifiedOn: DateTime\n savedOn: DateTime\n createdBy: FmCreatedByInput\n modifiedBy: FmCreatedByInput\n savedBy: FmCreatedByInput\n location: FmFile_LocationInput\n ${inputUpdateFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type FmFileResponse {\n data: FmFile\n error: FmError\n }\n\n input FmFileListWhereInput {\n ${listFilterFieldsRender.allFiltersAsString()}\n location: FmFile_LocationWhereInput\n AND: [FmFileListWhereInput!]\n OR: [FmFileListWhereInput!]\n }\n\n type FmFileListResponse {\n data: [FmFile!]\n error: FmError\n meta: FmListMeta\n }\n\n enum FmFileListSorter {\n savedOn_ASC\n savedOn_DESC\n createdOn_ASC\n createdOn_DESC\n name_ASC\n name_DESC\n key_ASC\n key_DESC\n type_ASC\n type_DESC\n size_ASC\n size_DESC\n }\n\n input FmTagsListWhereInput {\n createdBy: String\n tags_startsWith: String\n tags_not_startsWith: String\n }\n\n type FmTag {\n tag: String!\n count: Number!\n }\n\n type FmTagsListResponse {\n data: [FmTag!]\n error: FmError\n }\n\n type FmCreateFilesResponse {\n data: [FmFile!]\n error: FmError\n }\n\n type FmFileModelResponse {\n data: JSON\n error: FmError\n }\n\n extend type FmQuery {\n getFileModel: FmFileModelResponse!\n getFile(id: ID!): FmFileResponse!\n getFileByUrl(url: String!): FmFileResponse\n listFiles(\n search: String\n where: FmFileListWhereInput\n limit: Int\n after: String\n sort: [FmFileListSorter!]\n ): FmFileListResponse!\n listTags(where: FmTagsListWhereInput): FmTagsListResponse!\n }\n\n extend type FmMutation {\n createFile(data: FmFileCreateInput!): FmFileResponse!\n createFiles(data: [FmFileCreateInput!]!): FmCreateFilesResponse!\n updateFile(id: ID!, data: FmFileUpdateInput!): FmFileResponse!\n deleteFile(id: ID!): FmBooleanResponse!\n }\n `);\n }\n\n private addSettingsResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"FmQuery.getSettings\",\n dependencies: [GetSettingsUseCase],\n resolver: (getSettings: GetSettingsUseCase.Interface) => {\n return async () => {\n const result = await getSettings.execute();\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.updateSettings\",\n dependencies: [UpdateSettingsUseCase],\n resolver: (updateSettings: UpdateSettingsUseCase.Interface) => {\n return async ({ args }) => {\n const result = await updateSettings.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n }\n\n private addFileQueryResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"FmFile.src\",\n dependencies: [FileUrlGenerator],\n resolver: (urlGenerator: FileUrlGenerator.Interface) => {\n return ({ parent }) => {\n return urlGenerator.generateUrl(parent);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmQuery.getFileModel\",\n dependencies: [FileModel],\n resolver: (fileModel: FileModel.Interface) => {\n return () => {\n return new Response(fileModel);\n };\n }\n });\n\n builder.addResolver<{ id: string }>({\n path: \"FmQuery.getFile\",\n dependencies: [GetFileUseCase],\n resolver: (getFile: GetFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await getFile.execute(args.id);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmQuery.listFiles\",\n dependencies: [ListFilesUseCase],\n resolver: (listFiles: ListFilesUseCase.Interface) => {\n return async ({ args }) => {\n const result = await listFiles.execute(args);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new ListResponse(result.value.items, result.value.meta);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmQuery.listTags\",\n dependencies: [ListTagsUseCase],\n resolver: (listTags: ListTagsUseCase.Interface) => {\n return async ({ args }) => {\n const result = await listTags.execute(args || {});\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver<{ url: string }>({\n path: \"FmQuery.getFileByUrl\",\n dependencies: [GetFileByUrlUseCase],\n resolver: (getFileByUrl: GetFileByUrlUseCase.Interface) => {\n return async ({ args }) => {\n const result = await getFileByUrl.execute(args.url);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n if (!result.value) {\n return new NotFoundResponse(\"File not found!\");\n }\n\n return new Response(result.value);\n };\n }\n });\n }\n\n private addFileMutationResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"FmMutation.createFile\",\n dependencies: [CreateFileUseCase],\n resolver: (createFile: CreateFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await createFile.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.createFiles\",\n dependencies: [CreateFilesInBatchUseCase],\n resolver: (createFilesInBatch: CreateFilesInBatchUseCase.Interface) => {\n return async ({ args }) => {\n const result = await createFilesInBatch.execute({\n files: args.data,\n meta: args.meta\n });\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.updateFile\",\n dependencies: [UpdateFileUseCase],\n resolver: (updateFile: UpdateFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await updateFile.execute({\n id: args.id,\n ...args.data\n });\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.deleteFile\",\n dependencies: [DeleteFileUseCase],\n resolver: (deleteFile: DeleteFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await deleteFile.execute(args.id);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(true);\n };\n }\n });\n }\n\n private async loadModels() {\n const modelsResult = await this.identityContext.withoutAuthorization(() => {\n return this.listModelsUseCase.execute();\n });\n\n return modelsResult.value;\n }\n}\n\nexport const FmGraphQLSchema = GraphQLSchemaFactory.createImplementation({\n implementation: FmGraphQLSchema_,\n dependencies: [\n IdentityContext,\n ListModelsUseCase,\n CmsModelFieldToGraphQLRegistry,\n FileModel,\n FileUrlGenerator\n ]\n});\n"],"names":["removeFieldRequiredValidation","field","validation","v","createUpdateFields","fields","collection","FmGraphQLSchema_","identityContext","listModelsUseCase","fieldRegistry","fileModel","fileUrlGenerator","builder","models","fieldTypes","renderFields","inputCreateFields","renderInputFields","inputUpdateFields","listFilterFieldsRender","renderListFilterFields","f","GetSettingsUseCase","getSettings","result","ErrorResponse","Response","UpdateSettingsUseCase","updateSettings","args","FileUrlGenerator","urlGenerator","parent","FileModel","GetFileUseCase","getFile","ListFilesUseCase","listFiles","ListResponse","ListTagsUseCase","listTags","GetFileByUrlUseCase","getFileByUrl","NotFoundResponse","CreateFileUseCase","createFile","CreateFilesInBatchUseCase","createFilesInBatch","UpdateFileUseCase","updateFile","DeleteFileUseCase","deleteFile","modelsResult","FmGraphQLSchema","GraphQLSchemaFactory","IdentityContext","ListModelsUseCase","CmsModelFieldToGraphQLRegistry"],"mappings":"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"}
1
+ {"version":3,"file":"graphql/FmGraphQLSchema.js","sources":["../../src/graphql/FmGraphQLSchema.ts"],"sourcesContent":["import { GraphQLSchemaFactory } from \"@webiny/api-graphql/graphql/abstractions.js\";\nimport { ErrorResponse } from \"@webiny/api-graphql\";\nimport { ListResponse } from \"@webiny/api-graphql\";\nimport { NotFoundResponse } from \"@webiny/api-graphql\";\nimport { Response } from \"@webiny/api-graphql\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields.js\";\nimport { renderInputFields } from \"@webiny/api-headless-cms/utils/renderInputFields.js\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { GetFileUseCase } from \"~/features/file/GetFile/abstractions.js\";\nimport { ListFilesUseCase } from \"~/features/file/ListFiles/abstractions.js\";\nimport { ListTagsUseCase } from \"~/features/file/ListTags/abstractions.js\";\nimport { CreateFileUseCase } from \"~/features/file/CreateFile/abstractions.js\";\nimport { CreateFilesInBatchUseCase } from \"~/features/file/CreateFilesInBatch/abstractions.js\";\nimport { UpdateFileUseCase } from \"~/features/file/UpdateFile/abstractions.js\";\nimport { DeleteFileUseCase } from \"~/features/file/DeleteFile/abstractions.js\";\nimport { GetFileByUrlUseCase } from \"~/features/file/GetFileByUrl/abstractions.js\";\nimport { GetSettingsUseCase } from \"~/features/settings/GetSettings/abstractions.js\";\nimport { UpdateSettingsUseCase } from \"~/features/settings/UpdateSettings/abstractions.js\";\nimport { FileUrlGenerator } from \"~/features/file/FileUrlGenerator/abstractions.js\";\nimport { FileModelProvider } from \"~/domain/file/abstractions.js\";\nimport type { CmsModelField } from \"@webiny/api-headless-cms/types/index.js\";\n\nconst removeFieldRequiredValidation = (field: CmsModelField) => {\n if (field.validation) {\n field.validation = field.validation.filter(validation => validation.name !== \"required\");\n }\n if (field.listValidation) {\n field.listValidation = field.listValidation.filter(v => v.name !== \"required\");\n }\n return field;\n};\n\nconst createUpdateFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.reduce<CmsModelField[]>((collection, field) => {\n collection.push(removeFieldRequiredValidation({ ...field }));\n return collection;\n }, []);\n};\n\nclass FmGraphQLSchema_ implements GraphQLSchemaFactory.Interface {\n public constructor(\n private readonly identityContext: IdentityContext.Interface,\n private readonly listModelsUseCase: ListModelsUseCase.Interface,\n private readonly fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface,\n private readonly fileModelProvider: FileModelProvider.Interface,\n private readonly fileUrlGenerator: FileUrlGenerator.Interface\n ) {}\n\n public async execute(\n builder: GraphQLSchemaFactory.SchemaBuilder\n ): Promise<GraphQLSchemaFactory.SchemaBuilder> {\n if (this.fileUrlGenerator.init) {\n await this.fileUrlGenerator.init();\n }\n\n this.addBaseTypeDefs(builder);\n await this.addFileTypeDefs(builder);\n this.addSettingsResolvers(builder);\n this.addFileQueryResolvers(builder);\n this.addFileMutationResolvers(builder);\n\n return builder;\n }\n\n private addBaseTypeDefs(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addTypeDefs(/* GraphQL */ `\n type FmError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type FmCreatedBy {\n id: ID\n displayName: String\n type: String\n }\n\n type FmListMeta {\n cursor: String\n totalCount: Int\n hasMoreItems: Boolean\n }\n\n type FmBooleanResponse {\n data: Boolean\n error: FmError\n }\n\n type FmSettings {\n uploadMinFileSize: Number\n uploadMaxFileSize: Number\n srcPrefix: String\n }\n\n input FmSettingsInput {\n uploadMinFileSize: Number\n uploadMaxFileSize: Number\n srcPrefix: String\n }\n\n type FmSettingsResponse {\n data: FmSettings\n error: FmError\n }\n\n type FmDeleteResponse {\n data: Boolean\n error: FmError\n }\n\n type FmQuery {\n getSettings: FmSettingsResponse\n }\n\n type FmMutation {\n updateSettings(data: FmSettingsInput): FmSettingsResponse\n }\n\n extend type Query {\n fileManager: FmQuery\n }\n\n extend type Mutation {\n fileManager: FmMutation\n }\n `);\n\n builder.addResolver({\n path: \"Query.fileManager\",\n resolver: () => {\n return () => ({});\n }\n });\n\n builder.addResolver({\n path: \"Mutation.fileManager\",\n resolver: () => {\n return () => ({});\n }\n });\n }\n\n private async addFileTypeDefs(builder: GraphQLSchemaFactory.SchemaBuilder): Promise<void> {\n const models = await this.loadModels();\n const fileModel = await this.fileModelProvider.get();\n const { fields } = fileModel;\n\n const fieldTypes = renderFields({\n models,\n model: fileModel,\n fields,\n type: \"manage\",\n fieldRegistry: this.fieldRegistry\n });\n\n const inputCreateFields = renderInputFields({\n models,\n model: fileModel,\n fields,\n fieldRegistry: this.fieldRegistry\n });\n\n const inputUpdateFields = renderInputFields({\n models,\n model: fileModel,\n fields: createUpdateFields(fields),\n fieldRegistry: this.fieldRegistry\n });\n\n const listFilterFieldsRender = renderListFilterFields({\n model: fileModel,\n fields: fileModel.fields,\n type: \"manage\",\n fieldRegistry: this.fieldRegistry,\n excludeFields: [\"entryId\", \"status\"]\n });\n\n builder.addTypeDefs(/* GraphQL */ `\n type FmFile_Location {\n folderId: ID!\n }\n\n input FmFile_LocationInput {\n folderId: ID!\n }\n\n input FmFile_LocationWhereInput {\n folderId: ID\n folderId_in: [ID!]\n folderId_not: ID\n folderId_not_in: [ID!]\n }\n\n ${fieldTypes.map(f => f.typeDefs).join(\"\\n\")}\n\n type FmFile {\n id: ID!\n createdOn: DateTime!\n modifiedOn: DateTime\n savedOn: DateTime!\n createdBy: FmCreatedBy!\n modifiedBy: FmCreatedBy\n savedBy: FmCreatedBy!\n location: FmFile_Location!\n src: String\n ${fieldTypes.map(f => f.fields).join(\"\\n\")}\n }\n\n ${inputCreateFields.map(f => f.typeDefs).join(\"\\n\")}\n\n input FmCreatedByInput {\n id: ID!\n displayName: String!\n type: String!\n }\n\n input FmFileCreateInput {\n id: ID!\n createdOn: DateTime\n modifiedOn: DateTime\n savedOn: DateTime\n createdBy: FmCreatedByInput\n modifiedBy: FmCreatedByInput\n savedBy: FmCreatedByInput\n location: FmFile_LocationInput\n ${inputCreateFields.map(f => f.fields).join(\"\\n\")}\n }\n\n input FmFileUpdateInput {\n createdOn: DateTime\n modifiedOn: DateTime\n savedOn: DateTime\n createdBy: FmCreatedByInput\n modifiedBy: FmCreatedByInput\n savedBy: FmCreatedByInput\n location: FmFile_LocationInput\n ${inputUpdateFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type FmFileResponse {\n data: FmFile\n error: FmError\n }\n\n input FmFileListWhereInput {\n ${listFilterFieldsRender.allFiltersAsString()}\n location: FmFile_LocationWhereInput\n AND: [FmFileListWhereInput!]\n OR: [FmFileListWhereInput!]\n }\n\n type FmFileListResponse {\n data: [FmFile!]\n error: FmError\n meta: FmListMeta\n }\n\n enum FmFileListSorter {\n savedOn_ASC\n savedOn_DESC\n createdOn_ASC\n createdOn_DESC\n name_ASC\n name_DESC\n key_ASC\n key_DESC\n type_ASC\n type_DESC\n size_ASC\n size_DESC\n }\n\n input FmTagsListWhereInput {\n createdBy: String\n tags_startsWith: String\n tags_not_startsWith: String\n }\n\n type FmTag {\n tag: String!\n count: Number!\n }\n\n type FmTagsListResponse {\n data: [FmTag!]\n error: FmError\n }\n\n type FmCreateFilesResponse {\n data: [FmFile!]\n error: FmError\n }\n\n type FmFileModelResponse {\n data: JSON\n error: FmError\n }\n\n extend type FmQuery {\n getFileModel: FmFileModelResponse!\n getFile(id: ID!): FmFileResponse!\n getFileByUrl(url: String!): FmFileResponse\n listFiles(\n search: String\n where: FmFileListWhereInput\n limit: Int\n after: String\n sort: [FmFileListSorter!]\n ): FmFileListResponse!\n listTags(where: FmTagsListWhereInput): FmTagsListResponse!\n }\n\n extend type FmMutation {\n createFile(data: FmFileCreateInput!): FmFileResponse!\n createFiles(data: [FmFileCreateInput!]!): FmCreateFilesResponse!\n updateFile(id: ID!, data: FmFileUpdateInput!): FmFileResponse!\n deleteFile(id: ID!): FmBooleanResponse!\n }\n `);\n }\n\n private addSettingsResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"FmQuery.getSettings\",\n dependencies: [GetSettingsUseCase],\n resolver: (getSettings: GetSettingsUseCase.Interface) => {\n return async () => {\n const result = await getSettings.execute();\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.updateSettings\",\n dependencies: [UpdateSettingsUseCase],\n resolver: (updateSettings: UpdateSettingsUseCase.Interface) => {\n return async ({ args }) => {\n const result = await updateSettings.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n }\n\n private addFileQueryResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"FmFile.src\",\n dependencies: [FileUrlGenerator],\n resolver: (urlGenerator: FileUrlGenerator.Interface) => {\n return ({ parent }) => {\n return urlGenerator.generateUrl(parent);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmQuery.getFileModel\",\n dependencies: [FileModelProvider],\n resolver: (fileModelProvider: FileModelProvider.Interface) => {\n return async () => {\n return new Response(await fileModelProvider.get());\n };\n }\n });\n\n builder.addResolver<{ id: string }>({\n path: \"FmQuery.getFile\",\n dependencies: [GetFileUseCase],\n resolver: (getFile: GetFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await getFile.execute(args.id);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmQuery.listFiles\",\n dependencies: [ListFilesUseCase],\n resolver: (listFiles: ListFilesUseCase.Interface) => {\n return async ({ args }) => {\n const result = await listFiles.execute(args);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new ListResponse(result.value.items, result.value.meta);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmQuery.listTags\",\n dependencies: [ListTagsUseCase],\n resolver: (listTags: ListTagsUseCase.Interface) => {\n return async ({ args }) => {\n const result = await listTags.execute(args || {});\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver<{ url: string }>({\n path: \"FmQuery.getFileByUrl\",\n dependencies: [GetFileByUrlUseCase],\n resolver: (getFileByUrl: GetFileByUrlUseCase.Interface) => {\n return async ({ args }) => {\n const result = await getFileByUrl.execute(args.url);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n if (!result.value) {\n return new NotFoundResponse(\"File not found!\");\n }\n\n return new Response(result.value);\n };\n }\n });\n }\n\n private addFileMutationResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"FmMutation.createFile\",\n dependencies: [CreateFileUseCase],\n resolver: (createFile: CreateFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await createFile.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.createFiles\",\n dependencies: [CreateFilesInBatchUseCase],\n resolver: (createFilesInBatch: CreateFilesInBatchUseCase.Interface) => {\n return async ({ args }) => {\n const result = await createFilesInBatch.execute({\n files: args.data,\n meta: args.meta\n });\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.updateFile\",\n dependencies: [UpdateFileUseCase],\n resolver: (updateFile: UpdateFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await updateFile.execute({\n id: args.id,\n ...args.data\n });\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.deleteFile\",\n dependencies: [DeleteFileUseCase],\n resolver: (deleteFile: DeleteFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await deleteFile.execute(args.id);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(true);\n };\n }\n });\n }\n\n private async loadModels() {\n const modelsResult = await this.identityContext.withoutAuthorization(() => {\n return this.listModelsUseCase.execute();\n });\n\n return modelsResult.value;\n }\n}\n\nexport const FmGraphQLSchema = GraphQLSchemaFactory.createImplementation({\n implementation: FmGraphQLSchema_,\n dependencies: [\n IdentityContext,\n ListModelsUseCase,\n CmsModelFieldToGraphQLRegistry,\n FileModelProvider,\n FileUrlGenerator\n ]\n});\n"],"names":["removeFieldRequiredValidation","field","validation","v","createUpdateFields","fields","collection","FmGraphQLSchema_","identityContext","listModelsUseCase","fieldRegistry","fileModelProvider","fileUrlGenerator","builder","models","fileModel","fieldTypes","renderFields","inputCreateFields","renderInputFields","inputUpdateFields","listFilterFieldsRender","renderListFilterFields","f","GetSettingsUseCase","getSettings","result","ErrorResponse","Response","UpdateSettingsUseCase","updateSettings","args","FileUrlGenerator","urlGenerator","parent","FileModelProvider","GetFileUseCase","getFile","ListFilesUseCase","listFiles","ListResponse","ListTagsUseCase","listTags","GetFileByUrlUseCase","getFileByUrl","NotFoundResponse","CreateFileUseCase","createFile","CreateFilesInBatchUseCase","createFilesInBatch","UpdateFileUseCase","updateFile","DeleteFileUseCase","deleteFile","modelsResult","FmGraphQLSchema","GraphQLSchemaFactory","IdentityContext","ListModelsUseCase","CmsModelFieldToGraphQLRegistry"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-file-manager",
3
- "version": "6.6.0-alpha.0",
3
+ "version": "6.6.0-alpha.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -22,19 +22,19 @@
22
22
  ],
23
23
  "license": "MIT",
24
24
  "dependencies": {
25
- "@webiny/api": "6.6.0-alpha.0",
26
- "@webiny/api-core": "6.6.0-alpha.0",
27
- "@webiny/api-graphql": "6.6.0-alpha.0",
28
- "@webiny/api-headless-cms": "6.6.0-alpha.0",
29
- "@webiny/background-tasks": "6.6.0-alpha.0",
30
- "@webiny/build-tools": "6.6.0-alpha.0",
31
- "@webiny/di": "1.0.2",
32
- "@webiny/error": "6.6.0-alpha.0",
33
- "@webiny/event-handler-core": "6.6.0-alpha.0",
34
- "@webiny/feature": "6.6.0-alpha.0",
35
- "@webiny/handler": "6.6.0-alpha.0",
36
- "@webiny/plugins": "6.6.0-alpha.0",
37
- "@webiny/wcp": "6.6.0-alpha.0",
25
+ "@webiny/api": "6.6.0-alpha.1",
26
+ "@webiny/api-core": "6.6.0-alpha.1",
27
+ "@webiny/api-graphql": "6.6.0-alpha.1",
28
+ "@webiny/api-headless-cms": "6.6.0-alpha.1",
29
+ "@webiny/background-tasks": "6.6.0-alpha.1",
30
+ "@webiny/build-tools": "6.6.0-alpha.1",
31
+ "@webiny/di": "1.1.0",
32
+ "@webiny/error": "6.6.0-alpha.1",
33
+ "@webiny/event-handler-core": "6.6.0-alpha.1",
34
+ "@webiny/feature": "6.6.0-alpha.1",
35
+ "@webiny/handler": "6.6.0-alpha.1",
36
+ "@webiny/plugins": "6.6.0-alpha.1",
37
+ "@webiny/wcp": "6.6.0-alpha.1",
38
38
  "cache-control-parser": "2.2.0",
39
39
  "graphql": "16.14.2",
40
40
  "mime": "4.1.0",
@@ -45,10 +45,9 @@
45
45
  },
46
46
  "devDependencies": {
47
47
  "@types/object-hash": "3.0.6",
48
- "@webiny/api-core-testing": "6.6.0-alpha.0",
49
- "@webiny/project-utils": "6.6.0-alpha.0",
50
- "@webiny/utils": "6.6.0-alpha.0",
51
- "@webiny/wcp": "6.6.0-alpha.0",
48
+ "@webiny/api-core-testing": "6.6.0-alpha.1",
49
+ "@webiny/utils": "6.6.0-alpha.1",
50
+ "@webiny/wcp": "6.6.0-alpha.1",
52
51
  "rimraf": "6.1.3",
53
52
  "typescript": "7.0.2"
54
53
  },
@@ -1,13 +0,0 @@
1
- import type { IRequestContextInitializer } from "@webiny/event-handler-core";
2
- import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
3
- import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
4
- declare class FileModelContextualSchemaImpl implements IRequestContextInitializer {
5
- private tenantCtx;
6
- private identityCtx;
7
- constructor(tenantCtx: TenantContext.Interface, identityCtx: IdentityContext.Interface);
8
- init(ctx: Record<string, any>): Promise<void>;
9
- }
10
- export declare const FileModelContextualSchema: typeof FileModelContextualSchemaImpl & {
11
- __abstraction: import("@webiny/di").Abstraction<IRequestContextInitializer>;
12
- };
13
- export {};
@@ -1,31 +0,0 @@
1
- import { RequestContextInitializer } from "@webiny/event-handler-core";
2
- import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
3
- import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/abstractions.js";
4
- import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
5
- import { FileModel } from "../domain/file/abstractions.js";
6
- import { FILE_MODEL_ID } from "../domain/file/file.model.js";
7
- class FileModelContextualSchemaImpl {
8
- constructor(tenantCtx, identityCtx){
9
- this.tenantCtx = tenantCtx;
10
- this.identityCtx = identityCtx;
11
- }
12
- async init(ctx) {
13
- if (!this.tenantCtx.getTenant()) return;
14
- const container = ctx.container;
15
- const getModel = container.resolve(GetModelUseCase);
16
- await this.identityCtx.withoutAuthorization(async ()=>{
17
- const result = await getModel.execute(FILE_MODEL_ID);
18
- if (result.value) container.registerInstance(FileModel, result.value);
19
- });
20
- }
21
- }
22
- const FileModelContextualSchema = RequestContextInitializer.createImplementation({
23
- implementation: FileModelContextualSchemaImpl,
24
- dependencies: [
25
- TenantContext,
26
- IdentityContext
27
- ]
28
- });
29
- export { FileModelContextualSchema };
30
-
31
- //# sourceMappingURL=FileModelContextualSchema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"features/FileModelContextualSchema.js","sources":["../../src/features/FileModelContextualSchema.ts"],"sourcesContent":["import type { Container } from \"@webiny/di\";\nimport { RequestContextInitializer } from \"@webiny/event-handler-core\";\nimport type { IRequestContextInitializer } from \"@webiny/event-handler-core\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/abstractions.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { FileModel } from \"~/domain/file/abstractions.js\";\nimport { FILE_MODEL_ID } from \"~/domain/file/file.model.js\";\n\nclass FileModelContextualSchemaImpl implements IRequestContextInitializer {\n constructor(\n private tenantCtx: TenantContext.Interface,\n private identityCtx: IdentityContext.Interface\n ) {}\n\n async init(ctx: Record<string, any>): Promise<void> {\n if (!this.tenantCtx.getTenant()) {\n return;\n }\n\n const container = ctx.container as Container;\n // Resolved lazily here (build/request time), not as a constructor dep: GetModelUseCase\n // depends on AccessControl, which the CMS initializer only registers during its own init().\n const getModel = container.resolve(GetModelUseCase);\n\n await this.identityCtx.withoutAuthorization(async () => {\n const result = await getModel.execute(FILE_MODEL_ID);\n if (result.value) {\n container.registerInstance(FileModel, result.value);\n }\n });\n }\n}\n\nexport const FileModelContextualSchema = RequestContextInitializer.createImplementation({\n implementation: FileModelContextualSchemaImpl,\n dependencies: [TenantContext, IdentityContext]\n});\n"],"names":["FileModelContextualSchemaImpl","tenantCtx","identityCtx","ctx","container","getModel","GetModelUseCase","result","FILE_MODEL_ID","FileModel","FileModelContextualSchema","RequestContextInitializer","TenantContext","IdentityContext"],"mappings":";;;;;;AASA,MAAMA;IACF,YACYC,SAAkC,EAClCC,WAAsC,CAChD;aAFUD,SAAS,GAATA;aACAC,WAAW,GAAXA;IACT;IAEH,MAAM,KAAKC,GAAwB,EAAiB;QAChD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,IACzB;QAGJ,MAAMC,YAAYD,IAAI,SAAS;QAG/B,MAAME,WAAWD,UAAU,OAAO,CAACE;QAEnC,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC;YACxC,MAAMC,SAAS,MAAMF,SAAS,OAAO,CAACG;YACtC,IAAID,OAAO,KAAK,EACZH,UAAU,gBAAgB,CAACK,WAAWF,OAAO,KAAK;QAE1D;IACJ;AACJ;AAEO,MAAMG,4BAA4BC,0BAA0B,oBAAoB,CAAC;IACpF,gBAAgBX;IAChB,cAAc;QAACY;QAAeC;KAAgB;AAClD"}
@@ -1,24 +0,0 @@
1
- import * as __rspack_external__utils_js_a9c81ddd from "./utils.js";
2
- class AssetKeyGenerator {
3
- static create(asset) {
4
- return new AssetKeyGenerator(asset);
5
- }
6
- constructor(asset){
7
- this.asset = asset;
8
- this.utils = __rspack_external__utils_js_a9c81ddd;
9
- }
10
- getOptimizedImageKey() {
11
- return this.utils.getImageKey({
12
- key: this.asset.getKey()
13
- });
14
- }
15
- getTransformedImageKey(transformations) {
16
- return this.utils.getImageKey({
17
- key: this.asset.getKey(),
18
- transformations
19
- });
20
- }
21
- }
22
- export { AssetKeyGenerator };
23
-
24
- //# sourceMappingURL=AssetKeyGenerator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"features/assetDelivery/transformation/AssetKeyGenerator.js","sources":["../../../../src/features/assetDelivery/transformation/AssetKeyGenerator.ts"],"sourcesContent":["import type { Asset } from \"../../../delivery/index.js\";\nimport * as newUtils from \"./utils.js\";\n\nexport class AssetKeyGenerator {\n private readonly utils: typeof newUtils;\n private readonly asset: Asset;\n\n public static create(asset: Asset) {\n return new AssetKeyGenerator(asset);\n }\n\n private constructor(asset: Asset) {\n this.asset = asset;\n this.utils = newUtils;\n }\n\n public getOptimizedImageKey() {\n return this.utils.getImageKey({ key: this.asset.getKey() });\n }\n\n public getTransformedImageKey(transformations: Record<string, any>) {\n return this.utils.getImageKey({ key: this.asset.getKey(), transformations });\n }\n}\n"],"names":["AssetKeyGenerator","asset","newUtils","transformations"],"mappings":";AAGO,MAAMA;IAIT,OAAc,OAAOC,KAAY,EAAE;QAC/B,OAAO,IAAID,kBAAkBC;IACjC;IAEA,YAAoBA,KAAY,CAAE;QAC9B,IAAI,CAAC,KAAK,GAAGA;QACb,IAAI,CAAC,KAAK,GAAGC;IACjB;IAEO,uBAAuB;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YAAE,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;QAAG;IAC7D;IAEO,uBAAuBC,eAAoC,EAAE;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YAAE,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;YAAIA;QAAgB;IAC9E;AACJ"}
@@ -1,9 +0,0 @@
1
- import type { Asset } from "../../../delivery/AssetDelivery/Asset.js";
2
- import type { AssetRequest } from "../../../delivery/AssetDelivery/AssetRequest.js";
3
- import { type IAssetTransformationStrategy } from "../abstractions.js";
4
- export declare class PassthroughAssetTransformationStrategy implements IAssetTransformationStrategy {
5
- transform(assetRequest: AssetRequest, asset: Asset): Promise<Asset>;
6
- }
7
- export declare const PassthroughAssetTransformationStrategyImpl: typeof PassthroughAssetTransformationStrategy & {
8
- __abstraction: import("@webiny/di").Abstraction<IAssetTransformationStrategy>;
9
- };
@@ -1,13 +0,0 @@
1
- import { AssetTransformationStrategy } from "../abstractions.js";
2
- class PassthroughAssetTransformationStrategy {
3
- transform(assetRequest, asset) {
4
- return Promise.resolve(asset);
5
- }
6
- }
7
- const PassthroughAssetTransformationStrategyImpl = AssetTransformationStrategy.createImplementation({
8
- implementation: PassthroughAssetTransformationStrategy,
9
- dependencies: []
10
- });
11
- export { PassthroughAssetTransformationStrategy, PassthroughAssetTransformationStrategyImpl };
12
-
13
- //# sourceMappingURL=PassthroughAssetTransformationStrategy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.js","sources":["../../../../src/features/assetDelivery/transformation/PassthroughAssetTransformationStrategy.ts"],"sourcesContent":["import type { Asset } from \"~/delivery/AssetDelivery/Asset.js\";\nimport type { AssetRequest } from \"~/delivery/AssetDelivery/AssetRequest.js\";\nimport { AssetTransformationStrategy, type IAssetTransformationStrategy } from \"../abstractions.js\";\n\nexport class PassthroughAssetTransformationStrategy implements IAssetTransformationStrategy {\n transform(assetRequest: AssetRequest, asset: Asset): Promise<Asset> {\n return Promise.resolve(asset);\n }\n}\n\nexport const PassthroughAssetTransformationStrategyImpl =\n AssetTransformationStrategy.createImplementation({\n implementation: PassthroughAssetTransformationStrategy,\n dependencies: []\n });\n"],"names":["PassthroughAssetTransformationStrategy","assetRequest","asset","Promise","PassthroughAssetTransformationStrategyImpl","AssetTransformationStrategy"],"mappings":";AAIO,MAAMA;IACT,UAAUC,YAA0B,EAAEC,KAAY,EAAkB;QAChE,OAAOC,QAAQ,OAAO,CAACD;IAC3B;AACJ;AAEO,MAAME,6CACTC,4BAA4B,oBAAoB,CAAC;IAC7C,gBAAgBL;IAChB,cAAc,EAAE;AACpB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"features/assetDelivery/transformation/WidthCollection.js","sources":["../../../../src/features/assetDelivery/transformation/WidthCollection.ts"],"sourcesContent":["export class WidthCollection {\n private readonly values: number[];\n\n public static create(values: number[]) {\n return new WidthCollection(values);\n }\n\n private constructor(values: number[]) {\n this.values = values.sort((a, b) => a - b);\n }\n\n public max() {\n return Math.max(...this.values);\n }\n\n public min() {\n return Math.min(...this.values);\n }\n\n public getClosestOrMax(value: number | undefined): number {\n if (!value) {\n return this.max();\n }\n const gteGivenValue = this.values.filter(w => w >= value);\n return gteGivenValue.length > 0 ? gteGivenValue[0] : this.max();\n }\n}\n"],"names":["WidthCollection","values","a","b","Math","value","gteGivenValue","w"],"mappings":"AAAO,MAAMA;IAGT,OAAc,OAAOC,MAAgB,EAAE;QACnC,OAAO,IAAID,gBAAgBC;IAC/B;IAEA,YAAoBA,MAAgB,CAAE;QAClC,IAAI,CAAC,MAAM,GAAGA,OAAO,IAAI,CAAC,CAACC,GAAGC,IAAMD,IAAIC;IAC5C;IAEO,MAAM;QACT,OAAOC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM;IAClC;IAEO,MAAM;QACT,OAAOA,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM;IAClC;IAEO,gBAAgBC,KAAyB,EAAU;QACtD,IAAI,CAACA,OACD,OAAO,IAAI,CAAC,GAAG;QAEnB,MAAMC,gBAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,CAACC,CAAAA,IAAKA,KAAKF;QACnD,OAAOC,cAAc,MAAM,GAAG,IAAIA,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG;IACjE;AACJ"}
@@ -1,9 +0,0 @@
1
- declare const SUPPORTED_TRANSFORMABLE_IMAGES: string[];
2
- declare const getOptimizedImageKeyPrefix: (key: string) => string;
3
- declare const getOptimizedTransformedImageKeyPrefix: (key: string, transformationsHash: string) => string;
4
- interface GetImageKeyParams {
5
- key: string;
6
- transformations?: any;
7
- }
8
- declare const getImageKey: ({ key, transformations }: GetImageKeyParams) => string;
9
- export { SUPPORTED_TRANSFORMABLE_IMAGES, getImageKey, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix };
@@ -1,31 +0,0 @@
1
- import object_hash from "object-hash";
2
- import node_path from "node:path";
3
- const SUPPORTED_TRANSFORMABLE_IMAGES = [
4
- "jpg",
5
- "jpeg",
6
- "png",
7
- "webp"
8
- ];
9
- const parseKey = (key)=>{
10
- const filename = node_path.basename(key);
11
- const dirname = node_path.dirname(key);
12
- return {
13
- filename,
14
- dirname
15
- };
16
- };
17
- const getOptimizedImageKeyPrefix = (key)=>{
18
- const { filename, dirname } = parseKey(key);
19
- return `${dirname}/optimized/${filename}`;
20
- };
21
- const getOptimizedTransformedImageKeyPrefix = (key, transformationsHash)=>{
22
- const { filename, dirname } = parseKey(key);
23
- return `${dirname}/optimized/${transformationsHash}-${filename}`;
24
- };
25
- const getImageKey = ({ key, transformations })=>{
26
- if (!transformations) return getOptimizedImageKeyPrefix(key);
27
- return getOptimizedTransformedImageKeyPrefix(key, object_hash(transformations));
28
- };
29
- export { SUPPORTED_TRANSFORMABLE_IMAGES, getImageKey, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix };
30
-
31
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"features/assetDelivery/transformation/utils.js","sources":["../../../../src/features/assetDelivery/transformation/utils.ts"],"sourcesContent":["import objectHash from \"object-hash\";\nimport path from \"node:path\";\n\nconst SUPPORTED_TRANSFORMABLE_IMAGES = [\"jpg\", \"jpeg\", \"png\", \"webp\"];\n\nconst parseKey = (key: string) => {\n const filename = path.basename(key);\n const dirname = path.dirname(key);\n\n return { filename, dirname };\n};\n\nconst getOptimizedImageKeyPrefix = (key: string): string => {\n const { filename, dirname } = parseKey(key);\n\n return `${dirname}/optimized/${filename}`;\n};\n\nconst getOptimizedTransformedImageKeyPrefix = (\n key: string,\n transformationsHash: string\n): string => {\n const { filename, dirname } = parseKey(key);\n\n return `${dirname}/optimized/${transformationsHash}-${filename}`;\n};\n\ninterface GetImageKeyParams {\n key: string;\n transformations?: any;\n}\n\nconst getImageKey = ({ key, transformations }: GetImageKeyParams): string => {\n if (!transformations) {\n return getOptimizedImageKeyPrefix(key);\n }\n\n return getOptimizedTransformedImageKeyPrefix(key, objectHash(transformations));\n};\n\nexport {\n SUPPORTED_TRANSFORMABLE_IMAGES,\n getImageKey,\n getOptimizedImageKeyPrefix,\n getOptimizedTransformedImageKeyPrefix\n};\n"],"names":["SUPPORTED_TRANSFORMABLE_IMAGES","parseKey","key","filename","path","dirname","getOptimizedImageKeyPrefix","getOptimizedTransformedImageKeyPrefix","transformationsHash","getImageKey","transformations","objectHash"],"mappings":";;AAGA,MAAMA,iCAAiC;IAAC;IAAO;IAAQ;IAAO;CAAO;AAErE,MAAMC,WAAW,CAACC;IACd,MAAMC,WAAWC,UAAAA,QAAa,CAACF;IAC/B,MAAMG,UAAUD,UAAAA,OAAY,CAACF;IAE7B,OAAO;QAAEC;QAAUE;IAAQ;AAC/B;AAEA,MAAMC,6BAA6B,CAACJ;IAChC,MAAM,EAAEC,QAAQ,EAAEE,OAAO,EAAE,GAAGJ,SAASC;IAEvC,OAAO,GAAGG,QAAQ,WAAW,EAAEF,UAAU;AAC7C;AAEA,MAAMI,wCAAwC,CAC1CL,KACAM;IAEA,MAAM,EAAEL,QAAQ,EAAEE,OAAO,EAAE,GAAGJ,SAASC;IAEvC,OAAO,GAAGG,QAAQ,WAAW,EAAEG,oBAAoB,CAAC,EAAEL,UAAU;AACpE;AAOA,MAAMM,cAAc,CAAC,EAAEP,GAAG,EAAEQ,eAAe,EAAqB;IAC5D,IAAI,CAACA,iBACD,OAAOJ,2BAA2BJ;IAGtC,OAAOK,sCAAsCL,KAAKS,YAAWD;AACjE"}