@scality/data-browser-library 1.0.0-preview.11

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 (256) hide show
  1. package/dist/components/Editor.d.ts +12 -0
  2. package/dist/components/Editor.js +28 -0
  3. package/dist/components/__tests__/BucketCreate.test.d.ts +1 -0
  4. package/dist/components/__tests__/BucketCreate.test.js +408 -0
  5. package/dist/components/__tests__/BucketLifecycleFormPage.test.d.ts +1 -0
  6. package/dist/components/__tests__/BucketLifecycleFormPage.test.js +618 -0
  7. package/dist/components/__tests__/BucketLifecycleList.test.d.ts +1 -0
  8. package/dist/components/__tests__/BucketLifecycleList.test.js +325 -0
  9. package/dist/components/__tests__/BucketList.test.d.ts +1 -0
  10. package/dist/components/__tests__/BucketList.test.js +415 -0
  11. package/dist/components/__tests__/BucketNotificationCreatePage.test.d.ts +1 -0
  12. package/dist/components/__tests__/BucketNotificationCreatePage.test.js +316 -0
  13. package/dist/components/__tests__/BucketOverview.test.d.ts +1 -0
  14. package/dist/components/__tests__/BucketOverview.test.js +769 -0
  15. package/dist/components/__tests__/BucketPolicyPage.test.d.ts +1 -0
  16. package/dist/components/__tests__/BucketPolicyPage.test.js +268 -0
  17. package/dist/components/__tests__/BucketReplicationFormPage.test.d.ts +1 -0
  18. package/dist/components/__tests__/BucketReplicationFormPage.test.js +1757 -0
  19. package/dist/components/__tests__/BucketReplicationList.test.d.ts +1 -0
  20. package/dist/components/__tests__/BucketReplicationList.test.js +344 -0
  21. package/dist/components/__tests__/CreateFolderButton.test.d.ts +1 -0
  22. package/dist/components/__tests__/CreateFolderButton.test.js +147 -0
  23. package/dist/components/__tests__/DeleteBucketButton.test.d.ts +1 -0
  24. package/dist/components/__tests__/DeleteBucketButton.test.js +272 -0
  25. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.d.ts +1 -0
  26. package/dist/components/__tests__/DeleteBucketConfigRuleButton.test.js +196 -0
  27. package/dist/components/__tests__/DeleteObjectButton.test.d.ts +1 -0
  28. package/dist/components/__tests__/DeleteObjectButton.test.js +302 -0
  29. package/dist/components/__tests__/EmptyBucketButton.test.d.ts +1 -0
  30. package/dist/components/__tests__/EmptyBucketButton.test.js +302 -0
  31. package/dist/components/__tests__/MetadataSearch.test.d.ts +1 -0
  32. package/dist/components/__tests__/MetadataSearch.test.js +201 -0
  33. package/dist/components/__tests__/ObjectList.test.d.ts +1 -0
  34. package/dist/components/__tests__/ObjectList.test.js +283 -0
  35. package/dist/components/__tests__/UploadButton.test.d.ts +1 -0
  36. package/dist/components/__tests__/UploadButton.test.js +144 -0
  37. package/dist/components/buckets/BucketCreate.d.ts +49 -0
  38. package/dist/components/buckets/BucketCreate.js +237 -0
  39. package/dist/components/buckets/BucketDetails.d.ts +1 -0
  40. package/dist/components/buckets/BucketDetails.js +106 -0
  41. package/dist/components/buckets/BucketLifecycleFormPage.d.ts +15 -0
  42. package/dist/components/buckets/BucketLifecycleFormPage.js +1085 -0
  43. package/dist/components/buckets/BucketLifecycleList.d.ts +10 -0
  44. package/dist/components/buckets/BucketLifecycleList.js +270 -0
  45. package/dist/components/buckets/BucketList.d.ts +15 -0
  46. package/dist/components/buckets/BucketList.js +146 -0
  47. package/dist/components/buckets/BucketLocation.d.ts +3 -0
  48. package/dist/components/buckets/BucketLocation.js +16 -0
  49. package/dist/components/buckets/BucketOverview.d.ts +88 -0
  50. package/dist/components/buckets/BucketOverview.js +291 -0
  51. package/dist/components/buckets/BucketPage.d.ts +2 -0
  52. package/dist/components/buckets/BucketPage.js +47 -0
  53. package/dist/components/buckets/BucketPolicyButton.d.ts +7 -0
  54. package/dist/components/buckets/BucketPolicyButton.js +18 -0
  55. package/dist/components/buckets/BucketPolicyPage.d.ts +1 -0
  56. package/dist/components/buckets/BucketPolicyPage.js +236 -0
  57. package/dist/components/buckets/BucketReplicationFormPage.d.ts +1 -0
  58. package/dist/components/buckets/BucketReplicationFormPage.js +834 -0
  59. package/dist/components/buckets/BucketReplicationList.d.ts +11 -0
  60. package/dist/components/buckets/BucketReplicationList.js +189 -0
  61. package/dist/components/buckets/BucketVersioning.d.ts +4 -0
  62. package/dist/components/buckets/BucketVersioning.js +73 -0
  63. package/dist/components/buckets/DeleteBucketButton.d.ts +8 -0
  64. package/dist/components/buckets/DeleteBucketButton.js +78 -0
  65. package/dist/components/buckets/DeleteBucketConfigRuleButton.d.ts +18 -0
  66. package/dist/components/buckets/DeleteBucketConfigRuleButton.js +53 -0
  67. package/dist/components/buckets/EmptyBucketButton.d.ts +5 -0
  68. package/dist/components/buckets/EmptyBucketButton.js +232 -0
  69. package/dist/components/buckets/EmptyBucketSummary.d.ts +9 -0
  70. package/dist/components/buckets/EmptyBucketSummary.js +60 -0
  71. package/dist/components/buckets/EmptyBucketSummaryList.d.ts +13 -0
  72. package/dist/components/buckets/EmptyBucketSummaryList.js +140 -0
  73. package/dist/components/buckets/__tests__/BucketVersioning.test.d.ts +1 -0
  74. package/dist/components/buckets/__tests__/BucketVersioning.test.js +163 -0
  75. package/dist/components/buckets/notifications/BucketNotificationCreatePage.d.ts +1 -0
  76. package/dist/components/buckets/notifications/BucketNotificationCreatePage.js +234 -0
  77. package/dist/components/buckets/notifications/EventsSection.d.ts +1 -0
  78. package/dist/components/buckets/notifications/EventsSection.js +123 -0
  79. package/dist/components/buckets/notifications/events.d.ts +12 -0
  80. package/dist/components/buckets/notifications/events.js +27 -0
  81. package/dist/components/index.d.ts +21 -0
  82. package/dist/components/index.js +22 -0
  83. package/dist/components/layouts/ArrowNavigation.d.ts +4 -0
  84. package/dist/components/layouts/ArrowNavigation.js +16 -0
  85. package/dist/components/layouts/BrowserPageLayout.d.ts +12 -0
  86. package/dist/components/layouts/BrowserPageLayout.js +51 -0
  87. package/dist/components/objects/CreateFolderButton.d.ts +29 -0
  88. package/dist/components/objects/CreateFolderButton.js +118 -0
  89. package/dist/components/objects/DeleteObjectButton.d.ts +8 -0
  90. package/dist/components/objects/DeleteObjectButton.js +191 -0
  91. package/dist/components/objects/ObjectDetails/ObjectMetadata.d.ts +2 -0
  92. package/dist/components/objects/ObjectDetails/ObjectMetadata.js +356 -0
  93. package/dist/components/objects/ObjectDetails/ObjectSummary.d.ts +3 -0
  94. package/dist/components/objects/ObjectDetails/ObjectSummary.js +241 -0
  95. package/dist/components/objects/ObjectDetails/ObjectTags.d.ts +3 -0
  96. package/dist/components/objects/ObjectDetails/ObjectTags.js +272 -0
  97. package/dist/components/objects/ObjectDetails/index.d.ts +9 -0
  98. package/dist/components/objects/ObjectDetails/index.js +75 -0
  99. package/dist/components/objects/ObjectList.d.ts +40 -0
  100. package/dist/components/objects/ObjectList.js +453 -0
  101. package/dist/components/objects/ObjectLock/EditRetentionButton.d.ts +4 -0
  102. package/dist/components/objects/ObjectLock/EditRetentionButton.js +32 -0
  103. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.d.ts +3 -0
  104. package/dist/components/objects/ObjectLock/ObjectLockRetentionSettings.js +211 -0
  105. package/dist/components/objects/ObjectLock/ObjectLockSettings.d.ts +9 -0
  106. package/dist/components/objects/ObjectLock/ObjectLockSettings.js +158 -0
  107. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.d.ts +8 -0
  108. package/dist/components/objects/ObjectLock/ObjectLockSettingsUtils.js +39 -0
  109. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.d.ts +1 -0
  110. package/dist/components/objects/ObjectLock/__tests__/EditRetentionButton.test.js +204 -0
  111. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.d.ts +1 -0
  112. package/dist/components/objects/ObjectLock/__tests__/ObjectLockSettings.test.js +374 -0
  113. package/dist/components/objects/ObjectPage.d.ts +1 -0
  114. package/dist/components/objects/ObjectPage.js +45 -0
  115. package/dist/components/objects/UploadButton.d.ts +34 -0
  116. package/dist/components/objects/UploadButton.js +229 -0
  117. package/dist/components/providers/DataBrowserProvider.d.ts +20 -0
  118. package/dist/components/providers/DataBrowserProvider.js +42 -0
  119. package/dist/components/search/MetadataSearch.d.ts +5 -0
  120. package/dist/components/search/MetadataSearch.js +162 -0
  121. package/dist/components/search/SearchHints.d.ts +8 -0
  122. package/dist/components/search/SearchHints.js +21 -0
  123. package/dist/components/ui/ArrayFieldActions.d.ts +36 -0
  124. package/dist/components/ui/ArrayFieldActions.js +43 -0
  125. package/dist/components/ui/ConfirmDeleteRuleModal.d.ts +16 -0
  126. package/dist/components/ui/ConfirmDeleteRuleModal.js +43 -0
  127. package/dist/components/ui/DeleteObjectModalContent.d.ts +5 -0
  128. package/dist/components/ui/DeleteObjectModalContent.js +71 -0
  129. package/dist/components/ui/FilterFormSection.d.ts +44 -0
  130. package/dist/components/ui/FilterFormSection.js +159 -0
  131. package/dist/components/ui/Search.elements.d.ts +17 -0
  132. package/dist/components/ui/Search.elements.js +59 -0
  133. package/dist/components/ui/Table.elements.d.ts +36 -0
  134. package/dist/components/ui/Table.elements.js +87 -0
  135. package/dist/config/factory.d.ts +63 -0
  136. package/dist/config/factory.js +74 -0
  137. package/dist/config/types.d.ts +46 -0
  138. package/dist/config/types.js +0 -0
  139. package/dist/hooks/__tests__/useISVBucketDetection.test.d.ts +1 -0
  140. package/dist/hooks/__tests__/useISVBucketDetection.test.js +188 -0
  141. package/dist/hooks/__tests__/useIsBucketEmpty.test.d.ts +1 -0
  142. package/dist/hooks/__tests__/useIsBucketEmpty.test.js +122 -0
  143. package/dist/hooks/bucketConfiguration.d.ts +168 -0
  144. package/dist/hooks/bucketConfiguration.js +67 -0
  145. package/dist/hooks/bucketOperations.d.ts +36 -0
  146. package/dist/hooks/bucketOperations.js +12 -0
  147. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.d.ts +1 -0
  148. package/dist/hooks/factories/__tests__/useCreateS3FunctionMutationHook.test.js +276 -0
  149. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.d.ts +1 -0
  150. package/dist/hooks/factories/__tests__/useCreateS3InfiniteQueryHook.test.js +259 -0
  151. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.d.ts +1 -0
  152. package/dist/hooks/factories/__tests__/useCreateS3LoginHook.test.js +166 -0
  153. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.d.ts +1 -0
  154. package/dist/hooks/factories/__tests__/useCreateS3MutationHook.test.js +200 -0
  155. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.d.ts +1 -0
  156. package/dist/hooks/factories/__tests__/useCreateS3QueryHook.test.js +179 -0
  157. package/dist/hooks/factories/index.d.ts +18 -0
  158. package/dist/hooks/factories/index.js +5 -0
  159. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.d.ts +13 -0
  160. package/dist/hooks/factories/useCreateS3InfiniteQueryHook.js +76 -0
  161. package/dist/hooks/factories/useCreateS3LoginHook.d.ts +8 -0
  162. package/dist/hooks/factories/useCreateS3LoginHook.js +22 -0
  163. package/dist/hooks/factories/useCreateS3MutationHook.d.ts +5 -0
  164. package/dist/hooks/factories/useCreateS3MutationHook.js +50 -0
  165. package/dist/hooks/factories/useCreateS3QueryHook.d.ts +3 -0
  166. package/dist/hooks/factories/useCreateS3QueryHook.js +51 -0
  167. package/dist/hooks/index.d.ts +13 -0
  168. package/dist/hooks/index.js +13 -0
  169. package/dist/hooks/loginOperations.d.ts +21 -0
  170. package/dist/hooks/loginOperations.js +9 -0
  171. package/dist/hooks/objectOperations.d.ts +190 -0
  172. package/dist/hooks/objectOperations.js +67 -0
  173. package/dist/hooks/presignedOperations.d.ts +73 -0
  174. package/dist/hooks/presignedOperations.js +72 -0
  175. package/dist/hooks/useBatchObjectLegalHold.d.ts +11 -0
  176. package/dist/hooks/useBatchObjectLegalHold.js +45 -0
  177. package/dist/hooks/useDeleteBucketConfigRule.d.ts +26 -0
  178. package/dist/hooks/useDeleteBucketConfigRule.js +46 -0
  179. package/dist/hooks/useEmptyBucket.d.ts +27 -0
  180. package/dist/hooks/useEmptyBucket.js +116 -0
  181. package/dist/hooks/useISVBucketDetection.d.ts +15 -0
  182. package/dist/hooks/useISVBucketDetection.js +27 -0
  183. package/dist/hooks/useIsBucketEmpty.d.ts +7 -0
  184. package/dist/hooks/useIsBucketEmpty.js +36 -0
  185. package/dist/hooks/useLoginMutation.d.ts +21 -0
  186. package/dist/hooks/useLoginMutation.js +9 -0
  187. package/dist/hooks/useS3Client.d.ts +1 -0
  188. package/dist/hooks/useS3Client.js +13 -0
  189. package/dist/hooks/useTableRowSelection.d.ts +9 -0
  190. package/dist/hooks/useTableRowSelection.js +45 -0
  191. package/dist/index.d.ts +6 -0
  192. package/dist/index.js +6 -0
  193. package/dist/schemas/bucketPolicySchema.json +321 -0
  194. package/dist/test/msw/handlers/deleteBucket.d.ts +1 -0
  195. package/dist/test/msw/handlers/deleteBucket.js +14 -0
  196. package/dist/test/msw/handlers/getBucketAcl.d.ts +1 -0
  197. package/dist/test/msw/handlers/getBucketAcl.js +96 -0
  198. package/dist/test/msw/handlers/getBucketLocation.d.ts +1 -0
  199. package/dist/test/msw/handlers/getBucketLocation.js +23 -0
  200. package/dist/test/msw/handlers/getBucketPolicy.d.ts +11 -0
  201. package/dist/test/msw/handlers/getBucketPolicy.js +72 -0
  202. package/dist/test/msw/handlers/headObject.d.ts +1 -0
  203. package/dist/test/msw/handlers/headObject.js +17 -0
  204. package/dist/test/msw/handlers/listBuckets.d.ts +1 -0
  205. package/dist/test/msw/handlers/listBuckets.js +24 -0
  206. package/dist/test/msw/handlers/listObjectVersions.d.ts +1 -0
  207. package/dist/test/msw/handlers/listObjectVersions.js +83 -0
  208. package/dist/test/msw/handlers/listObjects.d.ts +1 -0
  209. package/dist/test/msw/handlers/listObjects.js +66 -0
  210. package/dist/test/msw/handlers/objectLegalHold.d.ts +1 -0
  211. package/dist/test/msw/handlers/objectLegalHold.js +24 -0
  212. package/dist/test/msw/handlers/objectRetention.d.ts +1 -0
  213. package/dist/test/msw/handlers/objectRetention.js +27 -0
  214. package/dist/test/msw/handlers/putBucketAcl.d.ts +1 -0
  215. package/dist/test/msw/handlers/putBucketAcl.js +18 -0
  216. package/dist/test/msw/handlers/putObject.d.ts +1 -0
  217. package/dist/test/msw/handlers/putObject.js +16 -0
  218. package/dist/test/msw/handlers.d.ts +4 -0
  219. package/dist/test/msw/handlers.js +109 -0
  220. package/dist/test/msw/index.d.ts +2 -0
  221. package/dist/test/msw/index.js +3 -0
  222. package/dist/test/msw/server.d.ts +4 -0
  223. package/dist/test/msw/server.js +20 -0
  224. package/dist/test/msw/utils.d.ts +2 -0
  225. package/dist/test/msw/utils.js +13 -0
  226. package/dist/test/setup.d.ts +1 -0
  227. package/dist/test/setup.js +90 -0
  228. package/dist/test/testUtils.d.ts +181 -0
  229. package/dist/test/testUtils.js +310 -0
  230. package/dist/test/utils/errorHandling.test.d.ts +1 -0
  231. package/dist/test/utils/errorHandling.test.js +423 -0
  232. package/dist/types/index.d.ts +51 -0
  233. package/dist/types/index.js +0 -0
  234. package/dist/utils/constants.d.ts +12 -0
  235. package/dist/utils/constants.js +9 -0
  236. package/dist/utils/deletion/index.d.ts +2 -0
  237. package/dist/utils/deletion/index.js +2 -0
  238. package/dist/utils/deletion/messages.d.ts +5 -0
  239. package/dist/utils/deletion/messages.js +29 -0
  240. package/dist/utils/deletion/types.d.ts +11 -0
  241. package/dist/utils/deletion/types.js +0 -0
  242. package/dist/utils/errorHandling.d.ts +63 -0
  243. package/dist/utils/errorHandling.js +84 -0
  244. package/dist/utils/hooks.d.ts +2 -0
  245. package/dist/utils/hooks.js +26 -0
  246. package/dist/utils/index.d.ts +4 -0
  247. package/dist/utils/index.js +4 -0
  248. package/dist/utils/proxyMiddleware.d.ts +18 -0
  249. package/dist/utils/proxyMiddleware.js +56 -0
  250. package/dist/utils/s3Client.d.ts +5 -0
  251. package/dist/utils/s3Client.js +36 -0
  252. package/dist/utils/s3RuleUtils.d.ts +53 -0
  253. package/dist/utils/s3RuleUtils.js +101 -0
  254. package/dist/utils/useFeatures.d.ts +1 -0
  255. package/dist/utils/useFeatures.js +7 -0
  256. package/package.json +84 -0
@@ -0,0 +1,83 @@
1
+ import { rest } from "msw";
2
+ import { createS3ErrorXml, getS3BaseUrl } from "../utils.js";
3
+ const listObjectVersionsHandler = rest.get(`${getS3BaseUrl()}/:bucketName`, (req, res, ctx)=>{
4
+ const { bucketName } = req.params;
5
+ const url = new URL(req.url);
6
+ if (!url.searchParams.has("versions")) return;
7
+ const prefix = url.searchParams.get("prefix") || "";
8
+ const delimiter = url.searchParams.get("delimiter") || "";
9
+ const maxKeys = parseInt(url.searchParams.get("max-keys") || "1000", 10);
10
+ const keyMarker = url.searchParams.get("key-marker");
11
+ if ("string" == typeof bucketName) {
12
+ if (bucketName.includes("non-existent-bucket")) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchBucket", "The specified bucket does not exist", bucketName)));
13
+ if (bucketName.includes("access-denied-bucket")) return res(ctx.status(403), ctx.xml(createS3ErrorXml("AccessDenied", "Access Denied")));
14
+ if (bucketName.includes("network-error-bucket")) return res.networkError("Failed to connect");
15
+ if (bucketName.includes("empty-bucket")) return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
16
+ <ListVersionsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
17
+ <Name>${bucketName}</Name>
18
+ <Prefix>${prefix}</Prefix>
19
+ <Delimiter>${delimiter}</Delimiter>
20
+ <MaxKeys>${maxKeys}</MaxKeys>
21
+ <IsTruncated>false</IsTruncated>
22
+ </ListVersionsResult>`));
23
+ if (keyMarker) {
24
+ const pageKey = prefix && "file.txt" !== prefix ? `${prefix.replace(/\/$/, "")}-v3.txt` : "file-v3.txt";
25
+ return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
26
+ <ListVersionsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
27
+ <Name>${bucketName}</Name>
28
+ <Prefix>${prefix}</Prefix>
29
+ <Delimiter>${delimiter}</Delimiter>
30
+ <MaxKeys>${maxKeys}</MaxKeys>
31
+ <IsTruncated>false</IsTruncated>
32
+ <Version>
33
+ <Key>${pageKey}</Key>
34
+ <VersionId>version-id-3</VersionId>
35
+ <IsLatest>true</IsLatest>
36
+ <LastModified>2023-10-12T17:50:00.000Z</LastModified>
37
+ <ETag>&quot;version-etag-3&quot;</ETag>
38
+ <Size>1024</Size>
39
+ <StorageClass>STANDARD</StorageClass>
40
+ </Version>
41
+ </ListVersionsResult>`));
42
+ }
43
+ const hasMorePages = bucketName.includes("paginated-bucket");
44
+ const baseKey = prefix && "file.txt" !== prefix ? prefix : "file.txt";
45
+ const deletedKey = prefix && "file.txt" !== prefix ? `${prefix.replace(/\/$/, "")}-deleted.txt` : "deleted-file.txt";
46
+ const nextKey = prefix && "file.txt" !== prefix ? `${prefix.replace(/\/$/, "")}-v2.txt` : "file-v2.txt";
47
+ return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
48
+ <ListVersionsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
49
+ <Name>${bucketName}</Name>
50
+ <Prefix>${prefix}</Prefix>
51
+ <Delimiter>${delimiter}</Delimiter>
52
+ <MaxKeys>${maxKeys}</MaxKeys>
53
+ <IsTruncated>${hasMorePages}</IsTruncated>
54
+ ${hasMorePages ? `<NextKeyMarker>${nextKey}</NextKeyMarker><NextVersionIdMarker>version-id-2</NextVersionIdMarker>` : ""}
55
+ <Version>
56
+ <Key>${baseKey}</Key>
57
+ <VersionId>version-id-1</VersionId>
58
+ <IsLatest>true</IsLatest>
59
+ <LastModified>2023-10-12T17:50:00.000Z</LastModified>
60
+ <ETag>&quot;version-etag-1&quot;</ETag>
61
+ <Size>1024</Size>
62
+ <StorageClass>STANDARD</StorageClass>
63
+ </Version>
64
+ <Version>
65
+ <Key>${baseKey}</Key>
66
+ <VersionId>version-id-2</VersionId>
67
+ <IsLatest>false</IsLatest>
68
+ <LastModified>2023-10-11T17:50:00.000Z</LastModified>
69
+ <ETag>&quot;version-etag-2&quot;</ETag>
70
+ <Size>512</Size>
71
+ <StorageClass>STANDARD</StorageClass>
72
+ </Version>
73
+ <DeleteMarker>
74
+ <Key>${deletedKey}</Key>
75
+ <VersionId>delete-marker-1</VersionId>
76
+ <IsLatest>true</IsLatest>
77
+ <LastModified>2023-10-10T17:50:00.000Z</LastModified>
78
+ </DeleteMarker>
79
+ </ListVersionsResult>`));
80
+ }
81
+ return res(ctx.status(200));
82
+ });
83
+ export { listObjectVersionsHandler };
@@ -0,0 +1 @@
1
+ export declare const listObjectsHandler: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>;
@@ -0,0 +1,66 @@
1
+ import { rest } from "msw";
2
+ import { createS3ErrorXml, getS3BaseUrl } from "../utils.js";
3
+ const listObjectsHandler = rest.get(`${getS3BaseUrl()}/:bucketName`, (req, res, ctx)=>{
4
+ const { bucketName } = req.params;
5
+ const url = new URL(req.url);
6
+ if ("2" !== url.searchParams.get("list-type")) return;
7
+ const prefix = url.searchParams.get("prefix") || "";
8
+ const delimiter = url.searchParams.get("delimiter") || "";
9
+ const maxKeys = parseInt(url.searchParams.get("max-keys") || "1000", 10);
10
+ const continuationToken = url.searchParams.get("continuation-token");
11
+ if ("string" == typeof bucketName) {
12
+ if (bucketName.includes("non-existent-bucket")) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchBucket", "The specified bucket does not exist", bucketName)));
13
+ if (bucketName.includes("access-denied-bucket")) return res(ctx.status(403), ctx.xml(createS3ErrorXml("AccessDenied", "Access Denied")));
14
+ if (bucketName.includes("network-error-bucket")) return res.networkError("Failed to connect");
15
+ if (bucketName.includes("empty-bucket")) return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
16
+ <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
17
+ <Name>${bucketName}</Name>
18
+ <Prefix>${prefix}</Prefix>
19
+ <Delimiter>${delimiter}</Delimiter>
20
+ <MaxKeys>${maxKeys}</MaxKeys>
21
+ <IsTruncated>false</IsTruncated>
22
+ </ListBucketResult>`));
23
+ if (continuationToken) return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
24
+ <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
25
+ <Name>${bucketName}</Name>
26
+ <Prefix>${prefix}</Prefix>
27
+ <Delimiter>${delimiter}</Delimiter>
28
+ <MaxKeys>${maxKeys}</MaxKeys>
29
+ <IsTruncated>false</IsTruncated>
30
+ <Contents>
31
+ <Key>${prefix}file3.txt</Key>
32
+ <LastModified>2023-10-12T17:50:00.000Z</LastModified>
33
+ <ETag>&quot;d41d8cd98f00b204e9800998ecf8427e&quot;</ETag>
34
+ <Size>2048</Size>
35
+ <StorageClass>STANDARD</StorageClass>
36
+ </Contents>
37
+ </ListBucketResult>`));
38
+ const hasMorePages = bucketName.includes("paginated-bucket");
39
+ return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
40
+ <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
41
+ <Name>${bucketName}</Name>
42
+ <Prefix>${prefix}</Prefix>
43
+ <Delimiter>${delimiter}</Delimiter>
44
+ <MaxKeys>${maxKeys}</MaxKeys>
45
+ <IsTruncated>${hasMorePages}</IsTruncated>
46
+ ${hasMorePages ? "<NextContinuationToken>token-123</NextContinuationToken>" : ""}
47
+ <Contents>
48
+ <Key>${prefix}file1.txt</Key>
49
+ <LastModified>2023-10-12T17:50:00.000Z</LastModified>
50
+ <ETag>&quot;d41d8cd98f00b204e9800998ecf8427e&quot;</ETag>
51
+ <Size>1024</Size>
52
+ <StorageClass>STANDARD</StorageClass>
53
+ </Contents>
54
+ <Contents>
55
+ <Key>${prefix}file2.txt</Key>
56
+ <LastModified>2023-10-12T17:50:00.000Z</LastModified>
57
+ <ETag>&quot;e58ed763928cf52221fa5c4e2d6422a&quot;</ETag>
58
+ <Size>512</Size>
59
+ <StorageClass>STANDARD</StorageClass>
60
+ </Contents>
61
+ ${delimiter ? `<CommonPrefixes><Prefix>${prefix}folder1/</Prefix></CommonPrefixes>` : ""}
62
+ </ListBucketResult>`));
63
+ }
64
+ return res(ctx.status(200));
65
+ });
66
+ export { listObjectsHandler };
@@ -0,0 +1 @@
1
+ export declare const getObjectLegalHoldHandler: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>;
@@ -0,0 +1,24 @@
1
+ import { rest } from "msw";
2
+ import { createS3ErrorXml, getS3BaseUrl } from "../utils.js";
3
+ import { ObjectLockLegalHoldStatus } from "@aws-sdk/client-s3";
4
+ const getObjectLegalHoldHandler = rest.get(`${getS3BaseUrl()}/:bucketName/*`, (req, res, ctx)=>{
5
+ const { bucketName } = req.params;
6
+ const url = new URL(req.url);
7
+ const objectKey = url.pathname.substring(url.pathname.indexOf("/", 1) + 1);
8
+ if (!url.searchParams.has("legal-hold")) return;
9
+ if ("string" == typeof bucketName) {
10
+ if ("no-such-bucket" === bucketName || "non-existent-bucket" === bucketName) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchBucket", "The specified bucket does not exist", bucketName)));
11
+ if ("access-denied-bucket" === bucketName || "restricted-bucket" === bucketName) return res(ctx.status(403), ctx.xml(createS3ErrorXml("AccessDenied", "Access Denied", bucketName, objectKey)));
12
+ if ("network-error-bucket" === bucketName) return res.networkError("Failed to connect");
13
+ if ("non-existent-object.txt" === objectKey) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchKey", "The specified key does not exist.", bucketName, objectKey)));
14
+ if ("no-legal-hold-object.txt" === objectKey) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchObjectLockConfiguration", "The specified object does not have a ObjectLock configuration", bucketName, objectKey)));
15
+ let status = ObjectLockLegalHoldStatus.ON;
16
+ if ("legal-hold-off-object.txt" === objectKey) status = ObjectLockLegalHoldStatus.OFF;
17
+ return res(ctx.status(200), ctx.set("Content-Type", "application/xml"), ctx.body(`<?xml version="1.0" encoding="UTF-8"?>
18
+ <LegalHold xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
19
+ <Status>${status}</Status>
20
+ </LegalHold>`));
21
+ }
22
+ return res(ctx.status(400), ctx.xml(createS3ErrorXml("InvalidArgument", "Invalid request parameters")));
23
+ });
24
+ export { getObjectLegalHoldHandler };
@@ -0,0 +1 @@
1
+ export declare const getObjectRetentionHandler: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>;
@@ -0,0 +1,27 @@
1
+ import { rest } from "msw";
2
+ import { createS3ErrorXml, getS3BaseUrl } from "../utils.js";
3
+ const getObjectRetentionHandler = rest.get(`${getS3BaseUrl()}/:bucketName/*`, (req, res, ctx)=>{
4
+ const { bucketName } = req.params;
5
+ const url = new URL(req.url);
6
+ const objectKey = url.pathname.substring(url.pathname.indexOf("/", 1) + 1);
7
+ if (!url.searchParams.has("retention")) return;
8
+ if ("string" == typeof bucketName) {
9
+ if (bucketName.includes("non-existent-bucket")) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchBucket", "The specified bucket does not exist", bucketName)));
10
+ if (objectKey.includes("non-existent-object")) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchKey", "The specified key does not exist.", bucketName, objectKey)));
11
+ if (bucketName.includes("restricted-bucket")) return res(ctx.status(403), ctx.xml(createS3ErrorXml("AccessDenied", "Access Denied")));
12
+ if (objectKey.includes("no-retention-object")) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchObjectLockConfiguration", "The specified object does not have a ObjectLock configuration", bucketName, objectKey)));
13
+ if (bucketName.includes("network-error-bucket")) return res.networkError("Failed to connect");
14
+ if (objectKey.includes("compliance-retention")) return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
15
+ <Retention xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
16
+ <Mode>COMPLIANCE</Mode>
17
+ <RetainUntilDate>2024-12-31T23:59:59.000Z</RetainUntilDate>
18
+ </Retention>`));
19
+ return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
20
+ <Retention xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
21
+ <Mode>GOVERNANCE</Mode>
22
+ <RetainUntilDate>2024-06-30T23:59:59.000Z</RetainUntilDate>
23
+ </Retention>`));
24
+ }
25
+ return res(ctx.status(400), ctx.xml(createS3ErrorXml("InvalidArgument", "Invalid request parameters")));
26
+ });
27
+ export { getObjectRetentionHandler };
@@ -0,0 +1 @@
1
+ export declare const putBucketAclHandler: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>;
@@ -0,0 +1,18 @@
1
+ import { rest } from "msw";
2
+ import { createS3ErrorXml, getS3BaseUrl } from "../utils.js";
3
+ const putBucketAclHandler = rest.put(`${getS3BaseUrl()}/:bucketName`, (req, res, ctx)=>{
4
+ const { bucketName } = req.params;
5
+ const url = new URL(req.url);
6
+ if (!url.searchParams.has("acl")) return;
7
+ if ("string" == typeof bucketName) {
8
+ if (bucketName.includes("non-existent-bucket")) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchBucket", "The specified bucket does not exist", bucketName)));
9
+ if (bucketName.includes("access-denied-bucket")) return res(ctx.status(403), ctx.xml(createS3ErrorXml("AccessDenied", "Access Denied")));
10
+ if (bucketName.includes("invalid-acl-bucket")) return res(ctx.status(400), ctx.xml(createS3ErrorXml("InvalidRequest", "The ACL configuration is invalid")));
11
+ if (bucketName.includes("malformed-acl-bucket")) return res(ctx.status(400), ctx.xml(createS3ErrorXml("MalformedACLError", "The XML provided does not match the expected format")));
12
+ if (bucketName.includes("network-error-bucket")) return res.networkError("Failed to connect");
13
+ const aclParam = url.searchParams.get("acl");
14
+ if ("invalid-acl-type" === aclParam) return res(ctx.status(400), ctx.xml(createS3ErrorXml("InvalidArgument", "Invalid canned ACL value")));
15
+ }
16
+ return res(ctx.status(200), ctx.set("Content-Type", "application/xml"), ctx.body(""));
17
+ });
18
+ export { putBucketAclHandler };
@@ -0,0 +1 @@
1
+ export declare const putObjectHandler: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>;
@@ -0,0 +1,16 @@
1
+ import { rest } from "msw";
2
+ import { createS3ErrorXml, getS3BaseUrl } from "../utils.js";
3
+ const putObjectHandler = rest.put(`${getS3BaseUrl()}/:bucketName/*`, (req, res, ctx)=>{
4
+ const { bucketName } = req.params;
5
+ const url = new URL(req.url);
6
+ const objectKey = url.pathname.substring(url.pathname.indexOf("/", 1) + 1);
7
+ if ("string" == typeof bucketName) {
8
+ if (bucketName.includes("non-existent-bucket")) return res(ctx.status(404), ctx.xml(createS3ErrorXml("NoSuchBucket", "The specified bucket does not exist", bucketName)));
9
+ if (bucketName.includes("access-denied-bucket")) return res(ctx.status(403), ctx.xml(createS3ErrorXml("AccessDenied", "Access Denied")));
10
+ if (bucketName.includes("network-error-bucket")) return res.networkError("Failed to connect");
11
+ if (objectKey.includes("invalid-key")) return res(ctx.status(400), ctx.xml(createS3ErrorXml("InvalidRequest", "The specified key is not valid")));
12
+ return res(ctx.status(200), ctx.set("ETag", '"mock-etag-123"'), ctx.set("x-amz-version-id", "mock-version-id"), ctx.set("x-amz-server-side-encryption", "AES256"), ctx.body(""));
13
+ }
14
+ return res(ctx.status(400), ctx.xml(createS3ErrorXml("InvalidArgument", "Invalid request parameters")));
15
+ });
16
+ export { putObjectHandler };
@@ -0,0 +1,4 @@
1
+ export declare const createBucketHandler: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>;
2
+ export declare const getBucketVersioningHandler: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>;
3
+ export declare const s3Handlers: import("msw").RestHandler<import("msw").MockedRequest<import("msw").DefaultRequestBody>>[];
4
+ export default s3Handlers;
@@ -0,0 +1,109 @@
1
+ import { rest } from "msw";
2
+ import { listBucketsHandler } from "./handlers/listBuckets.js";
3
+ import { deleteBucketHandler } from "./handlers/deleteBucket.js";
4
+ import { getBucketLocationHandler } from "./handlers/getBucketLocation.js";
5
+ import { getBucketAclHandler } from "./handlers/getBucketAcl.js";
6
+ import { getBucketPolicyHandler } from "./handlers/getBucketPolicy.js";
7
+ import { listObjectsHandler } from "./handlers/listObjects.js";
8
+ import { listObjectVersionsHandler } from "./handlers/listObjectVersions.js";
9
+ import { headObjectHandler } from "./handlers/headObject.js";
10
+ import { getObjectRetentionHandler } from "./handlers/objectRetention.js";
11
+ import { getObjectLegalHoldHandler } from "./handlers/objectLegalHold.js";
12
+ import { putObjectHandler } from "./handlers/putObject.js";
13
+ import { putBucketAclHandler } from "./handlers/putBucketAcl.js";
14
+ import { createS3ErrorXml, getS3BaseUrl } from "./utils.js";
15
+ const isBucketConfigurationRequest = (url)=>{
16
+ const configParams = [
17
+ "acl",
18
+ "policy",
19
+ "versioning",
20
+ "lifecycle",
21
+ "cors",
22
+ "website",
23
+ "tagging",
24
+ "encryption",
25
+ "notification",
26
+ "replication",
27
+ "requestPayment",
28
+ "accelerate",
29
+ "metrics",
30
+ "inventory",
31
+ "analytics",
32
+ "intelligentTiering",
33
+ "ownershipControls",
34
+ "publicAccessBlock",
35
+ "logging",
36
+ "location"
37
+ ];
38
+ return configParams.some((param)=>url.searchParams.has(param));
39
+ };
40
+ const createBucketHandler = rest.put(`${getS3BaseUrl()}/:bucketName`, (req, res, ctx)=>{
41
+ const { bucketName } = req.params;
42
+ const url = new URL(req.url);
43
+ if (isBucketConfigurationRequest(url)) return;
44
+ if ("string" == typeof bucketName) {
45
+ if (bucketName.includes("existing-bucket")) return res(ctx.status(409), ctx.xml(createS3ErrorXml("BucketAlreadyExists", "The requested bucket name is not available", bucketName)));
46
+ if (bucketName.includes("restricted-bucket")) return res(ctx.status(403), ctx.xml(createS3ErrorXml("AccessDenied", "Access Denied")));
47
+ if (bucketName.includes("invalid-bucket-name")) return res(ctx.status(400), ctx.xml(createS3ErrorXml("InvalidBucketName", "Invalid bucket name")));
48
+ if (bucketName.includes("network-test-bucket")) return res.networkError("Network connection failed");
49
+ }
50
+ return res(ctx.status(200), ctx.set("Location", `/${bucketName}`), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
51
+ <CreateBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
52
+ <Location>/${bucketName}</Location>
53
+ </CreateBucketResult>`));
54
+ });
55
+ const getBucketVersioningHandler = rest.get(`${getS3BaseUrl()}/:bucketName`, (req, res, ctx)=>{
56
+ const { bucketName } = req.params;
57
+ const url = new URL(req.url);
58
+ if (!url.searchParams.has("versioning")) return;
59
+ if ("string" == typeof bucketName) {
60
+ if (bucketName.includes("nonexistent-bucket")) return res(ctx.status(404), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
61
+ <Error>
62
+ <Code>NoSuchBucket</Code>
63
+ <Message>The specified bucket does not exist</Message>
64
+ <BucketName>${bucketName}</BucketName>
65
+ </Error>`));
66
+ if (bucketName.includes("access-denied-bucket")) return res(ctx.status(403), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
67
+ <Error>
68
+ <Code>AccessDenied</Code>
69
+ <Message>Access Denied</Message>
70
+ </Error>`));
71
+ if (bucketName.includes("network-error-bucket")) return res.networkError("Network connection failed");
72
+ if (bucketName.includes("enabled-versioning-bucket")) return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
73
+ <VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
74
+ <Status>Enabled</Status>
75
+ <MfaDelete>Disabled</MfaDelete>
76
+ </VersioningConfiguration>`));
77
+ if (bucketName.includes("suspended-versioning-bucket")) return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
78
+ <VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
79
+ <Status>Suspended</Status>
80
+ <MfaDelete>Disabled</MfaDelete>
81
+ </VersioningConfiguration>`));
82
+ if (bucketName.includes("mfa-enabled-bucket")) return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
83
+ <VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
84
+ <Status>Enabled</Status>
85
+ <MfaDelete>Enabled</MfaDelete>
86
+ </VersioningConfiguration>`));
87
+ }
88
+ return res(ctx.status(200), ctx.xml(`<?xml version="1.0" encoding="UTF-8"?>
89
+ <VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
90
+ </VersioningConfiguration>`));
91
+ });
92
+ const s3Handlers = [
93
+ listBucketsHandler,
94
+ createBucketHandler,
95
+ deleteBucketHandler,
96
+ getBucketVersioningHandler,
97
+ getBucketLocationHandler,
98
+ getBucketAclHandler,
99
+ getBucketPolicyHandler,
100
+ listObjectsHandler,
101
+ listObjectVersionsHandler,
102
+ getObjectRetentionHandler,
103
+ getObjectLegalHoldHandler,
104
+ putObjectHandler,
105
+ headObjectHandler,
106
+ putBucketAclHandler
107
+ ];
108
+ const handlers = s3Handlers;
109
+ export { createBucketHandler, handlers as default, getBucketVersioningHandler, s3Handlers };
@@ -0,0 +1,2 @@
1
+ export { server, setupMswServer, overrideHandlers } from "./server";
2
+ export { s3Handlers, createBucketHandler, getBucketVersioningHandler, } from "./handlers";
@@ -0,0 +1,3 @@
1
+ import { overrideHandlers, server, setupMswServer } from "./server.js";
2
+ import { createBucketHandler, getBucketVersioningHandler, s3Handlers } from "./handlers.js";
3
+ export { createBucketHandler, getBucketVersioningHandler, overrideHandlers, s3Handlers, server, setupMswServer };
@@ -0,0 +1,4 @@
1
+ export declare const server: import("msw/node").SetupServerApi;
2
+ export declare const setupMswServer: () => void;
3
+ export declare const overrideHandlers: (...handlers: Parameters<typeof server.use>) => void;
4
+ export { s3Handlers } from "./handlers";
@@ -0,0 +1,20 @@
1
+ import { setupServer } from "msw/node";
2
+ import { s3Handlers } from "./handlers.js";
3
+ const server = setupServer(...s3Handlers);
4
+ const setupMswServer = ()=>{
5
+ beforeAll(()=>{
6
+ server.listen({
7
+ onUnhandledRequest: "warn"
8
+ });
9
+ });
10
+ afterEach(()=>{
11
+ server.resetHandlers();
12
+ });
13
+ afterAll(()=>{
14
+ server.close();
15
+ });
16
+ };
17
+ const overrideHandlers = (...handlers)=>{
18
+ server.use(...handlers);
19
+ };
20
+ export { overrideHandlers, s3Handlers, server, setupMswServer };
@@ -0,0 +1,2 @@
1
+ export declare const getS3BaseUrl: () => string;
2
+ export declare const createS3ErrorXml: (code: string, message: string, bucketName?: string, key?: string) => string;
@@ -0,0 +1,13 @@
1
+ const getS3BaseUrl = ()=>"https://s3.amazonaws.com";
2
+ const createS3ErrorXml = (code, message, bucketName, key)=>{
3
+ let resourceDetails = "";
4
+ if (bucketName) resourceDetails += `<BucketName>${bucketName}</BucketName>`;
5
+ if (key) resourceDetails += `<Key>${key}</Key>`;
6
+ return `<?xml version="1.0" encoding="UTF-8"?>
7
+ <Error>
8
+ <Code>${code}</Code>
9
+ <Message>${message}</Message>
10
+ ${resourceDetails}
11
+ </Error>`;
12
+ };
13
+ export { createS3ErrorXml, getS3BaseUrl };
@@ -0,0 +1 @@
1
+ import "@testing-library/jest-dom";
@@ -0,0 +1,90 @@
1
+ import "@testing-library/jest-dom";
2
+ import { TextDecoder, TextEncoder } from "util";
3
+ var __webpack_require__ = {};
4
+ (()=>{
5
+ __webpack_require__.g = (()=>{
6
+ if ('object' == typeof globalThis) return globalThis;
7
+ try {
8
+ return this || new Function('return this')();
9
+ } catch (e) {
10
+ if ('object' == typeof window) return window;
11
+ }
12
+ })();
13
+ })();
14
+ process.env.AWS_ACCESS_KEY_ID = "test-access-key";
15
+ process.env.AWS_SECRET_ACCESS_KEY = "test-secret-key";
16
+ process.env.AWS_DEFAULT_REGION = "us-east-1";
17
+ const testS3Config = {
18
+ endpoint: "http://localhost:8000",
19
+ region: "us-east-1",
20
+ realHost: "s3.amazonaws.com",
21
+ forcePathStyle: true
22
+ };
23
+ const testDevConfig = {
24
+ useProxy: false,
25
+ proxyEndpoint: "http://localhost:3000/api/s3",
26
+ proxyBasePath: "/api/s3",
27
+ proxyHost: "localhost",
28
+ proxyPort: 3000
29
+ };
30
+ globalThis.__S3_CONFIG__ = testS3Config;
31
+ globalThis.__DEV_CONFIG__ = testDevConfig;
32
+ globalThis.__IS_DEVELOPMENT__ = true;
33
+ globalThis.__IS_PRODUCTION__ = false;
34
+ jest.setTimeout(10000);
35
+ Object.assign(__webpack_require__.g, {
36
+ TextDecoder: TextDecoder,
37
+ TextEncoder: TextEncoder
38
+ });
39
+ Object.defineProperty(HTMLCanvasElement.prototype, "getContext", {
40
+ value: ()=>null
41
+ });
42
+ jest.mock("pretty-bytes", ()=>({
43
+ __esModule: true,
44
+ default: (bytes)=>{
45
+ const sizes = [
46
+ "B",
47
+ "KB",
48
+ "MB",
49
+ "GB"
50
+ ];
51
+ let i = 0;
52
+ let num = bytes;
53
+ while(num >= 1024 && i < sizes.length - 1){
54
+ num /= 1024;
55
+ i++;
56
+ }
57
+ return `${Math.round(num)} ${sizes[i]}`;
58
+ }
59
+ }));
60
+ jest.mock("joi", ()=>{
61
+ const Joi = jest.requireActual("joi");
62
+ return {
63
+ __esModule: true,
64
+ default: Joi,
65
+ ...Joi
66
+ };
67
+ });
68
+ if (!File.prototype.arrayBuffer) File.prototype.arrayBuffer = function() {
69
+ return new Promise((resolve)=>{
70
+ const reader = new FileReader();
71
+ reader.onload = ()=>resolve(reader.result);
72
+ reader.readAsArrayBuffer(this);
73
+ });
74
+ };
75
+ const originalError = console.error;
76
+ const originalWarn = console.warn;
77
+ beforeAll(()=>{
78
+ console.error = (...args)=>{
79
+ if ("string" == typeof args[0] && (args[0].includes("AWS") || args[0].includes("S3") || args[0].includes("Warning: An update to") || args[0].includes('Warning: A props object containing a "key" prop'))) return;
80
+ originalError(...args);
81
+ };
82
+ console.warn = (...args)=>{
83
+ if ("string" == typeof args[0] && (args[0].includes("AWS") || args[0].includes("S3") || args[0].includes("Warning: An update to") || args[0].includes('Warning: A props object containing a "key" prop'))) return;
84
+ originalWarn(...args);
85
+ };
86
+ });
87
+ afterAll(()=>{
88
+ console.error = originalError;
89
+ console.warn = originalWarn;
90
+ });