@webiny/app-file-manager-s3 5.40.0-beta.2 → 5.40.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["MultiPartUploadAPI.ts"],"sourcesContent":["import { UploadedFile } from \"@webiny/app/types\";\n\nexport interface CreateUploadParams {\n data: {\n size: number;\n name: string;\n type: string;\n };\n numberOfParts: number;\n}\n\nexport interface CompleteUploadParams {\n fileKey: string;\n uploadId: string;\n}\n\nexport interface FilePart {\n partNumber: number;\n url: string;\n}\n\nexport interface MultiPartUpload {\n file: UploadedFile;\n uploadId: string;\n parts: FilePart[];\n}\n\nexport interface MultiPartUploadAPI {\n createUpload(params: CreateUploadParams): Promise<MultiPartUpload>;\n completeUpload(params: CompleteUploadParams): Promise<boolean>;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["MultiPartUploadAPI.ts"],"sourcesContent":["import { UploadedFile } from \"@webiny/app/types\";\n\nexport interface CreateUploadParams {\n data: {\n size: number;\n name: string;\n type: string;\n };\n numberOfParts: number;\n}\n\nexport interface CompleteUploadParams {\n fileKey: string;\n uploadId: string;\n}\n\nexport interface FilePart {\n partNumber: number;\n url: string;\n}\n\nexport interface MultiPartUpload {\n file: UploadedFile;\n uploadId: string;\n parts: FilePart[];\n}\n\nexport interface MultiPartUploadAPI {\n createUpload(params: CreateUploadParams): Promise<MultiPartUpload>;\n completeUpload(params: CompleteUploadParams): Promise<boolean>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -10,12 +10,12 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
10
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
11
  var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
12
12
  var _templateObject, _templateObject2;
13
- var MultiPartUploadGraphQLAPI = /*#__PURE__*/function () {
13
+ var MultiPartUploadGraphQLAPI = exports.MultiPartUploadGraphQLAPI = /*#__PURE__*/function () {
14
14
  function MultiPartUploadGraphQLAPI(client) {
15
15
  (0, _classCallCheck2.default)(this, MultiPartUploadGraphQLAPI);
16
16
  this.client = client;
17
17
  }
18
- (0, _createClass2.default)(MultiPartUploadGraphQLAPI, [{
18
+ return (0, _createClass2.default)(MultiPartUploadGraphQLAPI, [{
19
19
  key: "createUpload",
20
20
  value: async function createUpload(params) {
21
21
  var _await$this$client$mu = await this.client.mutate({
@@ -46,9 +46,7 @@ var MultiPartUploadGraphQLAPI = /*#__PURE__*/function () {
46
46
  return data.fileManager.completeMultiPartUpload.data;
47
47
  }
48
48
  }]);
49
- return MultiPartUploadGraphQLAPI;
50
49
  }();
51
- exports.MultiPartUploadGraphQLAPI = MultiPartUploadGraphQLAPI;
52
50
  var CREATE_UPLOAD = (0, _graphqlTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n mutation CreateMultiPartUpload($data: PreSignedPostPayloadInput!, $numberOfParts: Number!) {\n fileManager {\n createMultiPartUpload(data: $data, numberOfParts: $numberOfParts) {\n data {\n file {\n id\n key\n name\n size\n type\n }\n uploadId\n parts {\n partNumber\n url\n }\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n"])));
53
51
  var COMPLETE_UPLOAD = (0, _graphqlTag.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n mutation CompleteMultiPartUpload($fileKey: String!, $uploadId: String!) {\n fileManager {\n completeMultiPartUpload(fileKey: $fileKey, uploadId: $uploadId) {\n data\n error {\n code\n message\n data\n }\n }\n }\n }\n"])));
54
52
 
@@ -1 +1 @@
1
- {"version":3,"names":["_graphqlTag","_interopRequireDefault","require","_templateObject","_templateObject2","MultiPartUploadGraphQLAPI","client","_classCallCheck2","default","_createClass2","key","value","createUpload","params","_await$this$client$mu","mutate","mutation","CREATE_UPLOAD","variables","data","errors","console","error","Error","fileManager","createMultiPartUpload","completeUpload","_await$this$client$mu2","COMPLETE_UPLOAD","completeMultiPartUpload","exports","gql","_taggedTemplateLiteral2"],"sources":["MultiPartUploadGraphQLAPI.ts"],"sourcesContent":["import { UploadOptions } from \"@webiny/app/types\";\nimport gql from \"graphql-tag\";\nimport {\n CompleteUploadParams,\n CreateUploadParams,\n MultiPartUpload,\n MultiPartUploadAPI\n} from \"~/MultiPartUploadAPI\";\n\nexport class MultiPartUploadGraphQLAPI implements MultiPartUploadAPI {\n private client: UploadOptions[\"apolloClient\"];\n\n constructor(client: UploadOptions[\"apolloClient\"]) {\n this.client = client;\n }\n\n async createUpload(params: CreateUploadParams): Promise<MultiPartUpload> {\n const { data, errors } = await this.client.mutate<CreateUploadResponse>({\n mutation: CREATE_UPLOAD,\n variables: params\n });\n\n if (!data) {\n console.error(errors);\n throw new Error(`Failed to initialize a multi-part file upload!`);\n }\n\n return data.fileManager.createMultiPartUpload.data;\n }\n\n async completeUpload(params: CompleteUploadParams): Promise<boolean> {\n const { data, errors } = await this.client.mutate<CompleteUploadResponse>({\n mutation: COMPLETE_UPLOAD,\n variables: params\n });\n\n if (!data) {\n console.error(errors);\n throw new Error(`Failed to complete a multi-part file upload!`);\n }\n\n return data.fileManager.completeMultiPartUpload.data;\n }\n}\n\nconst CREATE_UPLOAD = gql`\n mutation CreateMultiPartUpload($data: PreSignedPostPayloadInput!, $numberOfParts: Number!) {\n fileManager {\n createMultiPartUpload(data: $data, numberOfParts: $numberOfParts) {\n data {\n file {\n id\n key\n name\n size\n type\n }\n uploadId\n parts {\n partNumber\n url\n }\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\ninterface CreateUploadResponse {\n fileManager: {\n createMultiPartUpload: {\n data: MultiPartUpload;\n error: {\n code: string;\n message: string;\n data: Record<string, any>;\n };\n };\n };\n}\n\nconst COMPLETE_UPLOAD = gql`\n mutation CompleteMultiPartUpload($fileKey: String!, $uploadId: String!) {\n fileManager {\n completeMultiPartUpload(fileKey: $fileKey, uploadId: $uploadId) {\n data\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\ninterface CompleteUploadResponse {\n fileManager: {\n completeMultiPartUpload: {\n data: boolean;\n error: {\n code: string;\n message: string;\n data: Record<string, any>;\n };\n };\n };\n}\n"],"mappings":";;;;;;;;;;AACA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8B,IAAAC,eAAA,EAAAC,gBAAA;AAAA,IAQjBC,yBAAyB;EAGlC,SAAAA,0BAAYC,MAAqC,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAH,yBAAA;IAC/C,IAAI,CAACC,MAAM,GAAGA,MAAM;EACxB;EAAC,IAAAG,aAAA,CAAAD,OAAA,EAAAH,yBAAA;IAAAK,GAAA;IAAAC,KAAA,EAED,eAAAC,aAAmBC,MAA0B,EAA4B;MACrE,IAAAC,qBAAA,GAAyB,MAAM,IAAI,CAACR,MAAM,CAACS,MAAM,CAAuB;UACpEC,QAAQ,EAAEC,aAAa;UACvBC,SAAS,EAAEL;QACf,CAAC,CAAC;QAHMM,IAAI,GAAAL,qBAAA,CAAJK,IAAI;QAAEC,MAAM,GAAAN,qBAAA,CAANM,MAAM;MAKpB,IAAI,CAACD,IAAI,EAAE;QACPE,OAAO,CAACC,KAAK,CAACF,MAAM,CAAC;QACrB,MAAM,IAAIG,KAAK,iDAAiD,CAAC;MACrE;MAEA,OAAOJ,IAAI,CAACK,WAAW,CAACC,qBAAqB,CAACN,IAAI;IACtD;EAAC;IAAAT,GAAA;IAAAC,KAAA,EAED,eAAAe,eAAqBb,MAA4B,EAAoB;MACjE,IAAAc,sBAAA,GAAyB,MAAM,IAAI,CAACrB,MAAM,CAACS,MAAM,CAAyB;UACtEC,QAAQ,EAAEY,eAAe;UACzBV,SAAS,EAAEL;QACf,CAAC,CAAC;QAHMM,IAAI,GAAAQ,sBAAA,CAAJR,IAAI;QAAEC,MAAM,GAAAO,sBAAA,CAANP,MAAM;MAKpB,IAAI,CAACD,IAAI,EAAE;QACPE,OAAO,CAACC,KAAK,CAACF,MAAM,CAAC;QACrB,MAAM,IAAIG,KAAK,+CAA+C,CAAC;MACnE;MAEA,OAAOJ,IAAI,CAACK,WAAW,CAACK,uBAAuB,CAACV,IAAI;IACxD;EAAC;EAAA,OAAAd,yBAAA;AAAA;AAAAyB,OAAA,CAAAzB,yBAAA,GAAAA,yBAAA;AAGL,IAAMY,aAAa,OAAGc,mBAAG,EAAA5B,eAAA,KAAAA,eAAA,OAAA6B,uBAAA,CAAAxB,OAAA,uvBA0BxB;AAeD,IAAMoB,eAAe,OAAGG,mBAAG,EAAA3B,gBAAA,KAAAA,gBAAA,OAAA4B,uBAAA,CAAAxB,OAAA,oXAa1B"}
1
+ {"version":3,"names":["_graphqlTag","_interopRequireDefault","require","_templateObject","_templateObject2","MultiPartUploadGraphQLAPI","exports","client","_classCallCheck2","default","_createClass2","key","value","createUpload","params","_await$this$client$mu","mutate","mutation","CREATE_UPLOAD","variables","data","errors","console","error","Error","fileManager","createMultiPartUpload","completeUpload","_await$this$client$mu2","COMPLETE_UPLOAD","completeMultiPartUpload","gql","_taggedTemplateLiteral2"],"sources":["MultiPartUploadGraphQLAPI.ts"],"sourcesContent":["import { UploadOptions } from \"@webiny/app/types\";\nimport gql from \"graphql-tag\";\nimport {\n CompleteUploadParams,\n CreateUploadParams,\n MultiPartUpload,\n MultiPartUploadAPI\n} from \"~/MultiPartUploadAPI\";\n\nexport class MultiPartUploadGraphQLAPI implements MultiPartUploadAPI {\n private client: UploadOptions[\"apolloClient\"];\n\n constructor(client: UploadOptions[\"apolloClient\"]) {\n this.client = client;\n }\n\n async createUpload(params: CreateUploadParams): Promise<MultiPartUpload> {\n const { data, errors } = await this.client.mutate<CreateUploadResponse>({\n mutation: CREATE_UPLOAD,\n variables: params\n });\n\n if (!data) {\n console.error(errors);\n throw new Error(`Failed to initialize a multi-part file upload!`);\n }\n\n return data.fileManager.createMultiPartUpload.data;\n }\n\n async completeUpload(params: CompleteUploadParams): Promise<boolean> {\n const { data, errors } = await this.client.mutate<CompleteUploadResponse>({\n mutation: COMPLETE_UPLOAD,\n variables: params\n });\n\n if (!data) {\n console.error(errors);\n throw new Error(`Failed to complete a multi-part file upload!`);\n }\n\n return data.fileManager.completeMultiPartUpload.data;\n }\n}\n\nconst CREATE_UPLOAD = gql`\n mutation CreateMultiPartUpload($data: PreSignedPostPayloadInput!, $numberOfParts: Number!) {\n fileManager {\n createMultiPartUpload(data: $data, numberOfParts: $numberOfParts) {\n data {\n file {\n id\n key\n name\n size\n type\n }\n uploadId\n parts {\n partNumber\n url\n }\n }\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\ninterface CreateUploadResponse {\n fileManager: {\n createMultiPartUpload: {\n data: MultiPartUpload;\n error: {\n code: string;\n message: string;\n data: Record<string, any>;\n };\n };\n };\n}\n\nconst COMPLETE_UPLOAD = gql`\n mutation CompleteMultiPartUpload($fileKey: String!, $uploadId: String!) {\n fileManager {\n completeMultiPartUpload(fileKey: $fileKey, uploadId: $uploadId) {\n data\n error {\n code\n message\n data\n }\n }\n }\n }\n`;\n\ninterface CompleteUploadResponse {\n fileManager: {\n completeMultiPartUpload: {\n data: boolean;\n error: {\n code: string;\n message: string;\n data: Record<string, any>;\n };\n };\n };\n}\n"],"mappings":";;;;;;;;;;AACA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8B,IAAAC,eAAA,EAAAC,gBAAA;AAAA,IAQjBC,yBAAyB,GAAAC,OAAA,CAAAD,yBAAA;EAGlC,SAAAA,0BAAYE,MAAqC,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAJ,yBAAA;IAC/C,IAAI,CAACE,MAAM,GAAGA,MAAM;EACxB;EAAC,WAAAG,aAAA,CAAAD,OAAA,EAAAJ,yBAAA;IAAAM,GAAA;IAAAC,KAAA,EAED,eAAAC,aAAmBC,MAA0B,EAA4B;MACrE,IAAAC,qBAAA,GAAyB,MAAM,IAAI,CAACR,MAAM,CAACS,MAAM,CAAuB;UACpEC,QAAQ,EAAEC,aAAa;UACvBC,SAAS,EAAEL;QACf,CAAC,CAAC;QAHMM,IAAI,GAAAL,qBAAA,CAAJK,IAAI;QAAEC,MAAM,GAAAN,qBAAA,CAANM,MAAM;MAKpB,IAAI,CAACD,IAAI,EAAE;QACPE,OAAO,CAACC,KAAK,CAACF,MAAM,CAAC;QACrB,MAAM,IAAIG,KAAK,iDAAiD,CAAC;MACrE;MAEA,OAAOJ,IAAI,CAACK,WAAW,CAACC,qBAAqB,CAACN,IAAI;IACtD;EAAC;IAAAT,GAAA;IAAAC,KAAA,EAED,eAAAe,eAAqBb,MAA4B,EAAoB;MACjE,IAAAc,sBAAA,GAAyB,MAAM,IAAI,CAACrB,MAAM,CAACS,MAAM,CAAyB;UACtEC,QAAQ,EAAEY,eAAe;UACzBV,SAAS,EAAEL;QACf,CAAC,CAAC;QAHMM,IAAI,GAAAQ,sBAAA,CAAJR,IAAI;QAAEC,MAAM,GAAAO,sBAAA,CAANP,MAAM;MAKpB,IAAI,CAACD,IAAI,EAAE;QACPE,OAAO,CAACC,KAAK,CAACF,MAAM,CAAC;QACrB,MAAM,IAAIG,KAAK,+CAA+C,CAAC;MACnE;MAEA,OAAOJ,IAAI,CAACK,WAAW,CAACK,uBAAuB,CAACV,IAAI;IACxD;EAAC;AAAA;AAGL,IAAMF,aAAa,OAAGa,mBAAG,EAAA5B,eAAA,KAAAA,eAAA,OAAA6B,uBAAA,CAAAvB,OAAA,uvBA0BxB;AAeD,IAAMoB,eAAe,OAAGE,mBAAG,EAAA3B,gBAAA,KAAAA,gBAAA,OAAA4B,uBAAA,CAAAvB,OAAA,oXAa1B","ignoreList":[]}
@@ -9,11 +9,11 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
9
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
10
  var _MultiPartUploader = require("./MultiPartUploader");
11
11
  var _MultiPartUploadGraphQLAPI = require("./MultiPartUploadGraphQLAPI");
12
- var MultiPartUploadStrategy = /*#__PURE__*/function () {
12
+ var MultiPartUploadStrategy = exports.MultiPartUploadStrategy = /*#__PURE__*/function () {
13
13
  function MultiPartUploadStrategy() {
14
14
  (0, _classCallCheck2.default)(this, MultiPartUploadStrategy);
15
15
  }
16
- (0, _createClass2.default)(MultiPartUploadStrategy, [{
16
+ return (0, _createClass2.default)(MultiPartUploadStrategy, [{
17
17
  key: "upload",
18
18
  value: async function upload(file, options) {
19
19
  var api = new _MultiPartUploadGraphQLAPI.MultiPartUploadGraphQLAPI(options.apolloClient);
@@ -61,8 +61,6 @@ var MultiPartUploadStrategy = /*#__PURE__*/function () {
61
61
  return envChunks || 5;
62
62
  }
63
63
  }]);
64
- return MultiPartUploadStrategy;
65
64
  }();
66
- exports.MultiPartUploadStrategy = MultiPartUploadStrategy;
67
65
 
68
66
  //# sourceMappingURL=MultiPartUploadStrategy.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_MultiPartUploader","require","_MultiPartUploadGraphQLAPI","MultiPartUploadStrategy","_classCallCheck2","default","_createClass2","key","value","upload","file","options","api","MultiPartUploadGraphQLAPI","apolloClient","uploader","MultiPartUploader","chunkSize","detectChunkSize","parallelUploads","detectParallelChunks","onProgress","uploadFile","envSize","parseInt","process","env","WEBINY_FILE_UPLOAD_CHUNK_SIZE","NODE_ENV","windowSize","window","envChunks","WEBINY_FILE_UPLOAD_PARALLEL_CHUNKS","windowChunks","exports"],"sources":["MultiPartUploadStrategy.ts"],"sourcesContent":["import { UploadedFile, UploadOptions } from \"@webiny/app/types\";\nimport { FileUploadStrategy } from \"~/index\";\nimport { MultiPartUploader } from \"~/MultiPartUploader\";\nimport { MultiPartUploadGraphQLAPI } from \"~/MultiPartUploadGraphQLAPI\";\n\nexport class MultiPartUploadStrategy implements FileUploadStrategy {\n async upload(file: File, options: UploadOptions): Promise<UploadedFile> {\n const api = new MultiPartUploadGraphQLAPI(options.apolloClient);\n\n const uploader = new MultiPartUploader(api, {\n chunkSize: this.detectChunkSize(),\n parallelUploads: this.detectParallelChunks()\n });\n\n if (options.onProgress) {\n uploader.onProgress(options.onProgress);\n }\n return uploader.uploadFile(file);\n }\n\n private detectChunkSize(): number {\n const envSize = parseInt(process.env.WEBINY_FILE_UPLOAD_CHUNK_SIZE || \"0\");\n\n // For dev purposes, we take this global var into consideration.\n if (process.env.NODE_ENV === \"development\") {\n // @ts-expect-error\n const windowSize = window[\"fmUploadChunkSize\"];\n if (windowSize) {\n return windowSize;\n }\n }\n\n // As a last resort, we check the baked in value, or fall back to 50MB chunk size.\n return envSize || 50;\n }\n\n private detectParallelChunks(): number {\n const envChunks = parseInt(process.env.WEBINY_FILE_UPLOAD_PARALLEL_CHUNKS || \"0\");\n\n // For dev purposes, we take this global var into consideration.\n if (process.env.NODE_ENV === \"development\") {\n // @ts-expect-error\n const windowChunks = window[\"fmUploadParallelChunks\"];\n if (windowChunks) {\n return windowChunks;\n }\n }\n\n // As a last resort, we check the baked in value, or fall back to 5 parallel chunks.\n return envChunks || 5;\n }\n}\n"],"mappings":";;;;;;;;;AAEA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,0BAAA,GAAAD,OAAA;AAAwE,IAE3DE,uBAAuB;EAAA,SAAAA,wBAAA;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAF,uBAAA;EAAA;EAAA,IAAAG,aAAA,CAAAD,OAAA,EAAAF,uBAAA;IAAAI,GAAA;IAAAC,KAAA,EAChC,eAAAC,OAAaC,IAAU,EAAEC,OAAsB,EAAyB;MACpE,IAAMC,GAAG,GAAG,IAAIC,oDAAyB,CAACF,OAAO,CAACG,YAAY,CAAC;MAE/D,IAAMC,QAAQ,GAAG,IAAIC,oCAAiB,CAACJ,GAAG,EAAE;QACxCK,SAAS,EAAE,IAAI,CAACC,eAAe,CAAC,CAAC;QACjCC,eAAe,EAAE,IAAI,CAACC,oBAAoB,CAAC;MAC/C,CAAC,CAAC;MAEF,IAAIT,OAAO,CAACU,UAAU,EAAE;QACpBN,QAAQ,CAACM,UAAU,CAACV,OAAO,CAACU,UAAU,CAAC;MAC3C;MACA,OAAON,QAAQ,CAACO,UAAU,CAACZ,IAAI,CAAC;IACpC;EAAC;IAAAH,GAAA;IAAAC,KAAA,EAED,SAAAU,gBAAA,EAAkC;MAC9B,IAAMK,OAAO,GAAGC,QAAQ,CAACC,OAAO,CAACC,GAAG,CAACC,6BAA6B,IAAI,GAAG,CAAC;;MAE1E;MACA,IAAIF,OAAO,CAACC,GAAG,CAACE,QAAQ,KAAK,aAAa,EAAE;QACxC;QACA,IAAMC,UAAU,GAAGC,MAAM,CAAC,mBAAmB,CAAC;QAC9C,IAAID,UAAU,EAAE;UACZ,OAAOA,UAAU;QACrB;MACJ;;MAEA;MACA,OAAON,OAAO,IAAI,EAAE;IACxB;EAAC;IAAAhB,GAAA;IAAAC,KAAA,EAED,SAAAY,qBAAA,EAAuC;MACnC,IAAMW,SAAS,GAAGP,QAAQ,CAACC,OAAO,CAACC,GAAG,CAACM,kCAAkC,IAAI,GAAG,CAAC;;MAEjF;MACA,IAAIP,OAAO,CAACC,GAAG,CAACE,QAAQ,KAAK,aAAa,EAAE;QACxC;QACA,IAAMK,YAAY,GAAGH,MAAM,CAAC,wBAAwB,CAAC;QACrD,IAAIG,YAAY,EAAE;UACd,OAAOA,YAAY;QACvB;MACJ;;MAEA;MACA,OAAOF,SAAS,IAAI,CAAC;IACzB;EAAC;EAAA,OAAA5B,uBAAA;AAAA;AAAA+B,OAAA,CAAA/B,uBAAA,GAAAA,uBAAA"}
1
+ {"version":3,"names":["_MultiPartUploader","require","_MultiPartUploadGraphQLAPI","MultiPartUploadStrategy","exports","_classCallCheck2","default","_createClass2","key","value","upload","file","options","api","MultiPartUploadGraphQLAPI","apolloClient","uploader","MultiPartUploader","chunkSize","detectChunkSize","parallelUploads","detectParallelChunks","onProgress","uploadFile","envSize","parseInt","process","env","WEBINY_FILE_UPLOAD_CHUNK_SIZE","NODE_ENV","windowSize","window","envChunks","WEBINY_FILE_UPLOAD_PARALLEL_CHUNKS","windowChunks"],"sources":["MultiPartUploadStrategy.ts"],"sourcesContent":["import { UploadedFile, UploadOptions } from \"@webiny/app/types\";\nimport { FileUploadStrategy } from \"~/index\";\nimport { MultiPartUploader } from \"~/MultiPartUploader\";\nimport { MultiPartUploadGraphQLAPI } from \"~/MultiPartUploadGraphQLAPI\";\n\nexport class MultiPartUploadStrategy implements FileUploadStrategy {\n async upload(file: File, options: UploadOptions): Promise<UploadedFile> {\n const api = new MultiPartUploadGraphQLAPI(options.apolloClient);\n\n const uploader = new MultiPartUploader(api, {\n chunkSize: this.detectChunkSize(),\n parallelUploads: this.detectParallelChunks()\n });\n\n if (options.onProgress) {\n uploader.onProgress(options.onProgress);\n }\n return uploader.uploadFile(file);\n }\n\n private detectChunkSize(): number {\n const envSize = parseInt(process.env.WEBINY_FILE_UPLOAD_CHUNK_SIZE || \"0\");\n\n // For dev purposes, we take this global var into consideration.\n if (process.env.NODE_ENV === \"development\") {\n // @ts-expect-error\n const windowSize = window[\"fmUploadChunkSize\"];\n if (windowSize) {\n return windowSize;\n }\n }\n\n // As a last resort, we check the baked in value, or fall back to 50MB chunk size.\n return envSize || 50;\n }\n\n private detectParallelChunks(): number {\n const envChunks = parseInt(process.env.WEBINY_FILE_UPLOAD_PARALLEL_CHUNKS || \"0\");\n\n // For dev purposes, we take this global var into consideration.\n if (process.env.NODE_ENV === \"development\") {\n // @ts-expect-error\n const windowChunks = window[\"fmUploadParallelChunks\"];\n if (windowChunks) {\n return windowChunks;\n }\n }\n\n // As a last resort, we check the baked in value, or fall back to 5 parallel chunks.\n return envChunks || 5;\n }\n}\n"],"mappings":";;;;;;;;;AAEA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,0BAAA,GAAAD,OAAA;AAAwE,IAE3DE,uBAAuB,GAAAC,OAAA,CAAAD,uBAAA;EAAA,SAAAA,wBAAA;IAAA,IAAAE,gBAAA,CAAAC,OAAA,QAAAH,uBAAA;EAAA;EAAA,WAAAI,aAAA,CAAAD,OAAA,EAAAH,uBAAA;IAAAK,GAAA;IAAAC,KAAA,EAChC,eAAAC,OAAaC,IAAU,EAAEC,OAAsB,EAAyB;MACpE,IAAMC,GAAG,GAAG,IAAIC,oDAAyB,CAACF,OAAO,CAACG,YAAY,CAAC;MAE/D,IAAMC,QAAQ,GAAG,IAAIC,oCAAiB,CAACJ,GAAG,EAAE;QACxCK,SAAS,EAAE,IAAI,CAACC,eAAe,CAAC,CAAC;QACjCC,eAAe,EAAE,IAAI,CAACC,oBAAoB,CAAC;MAC/C,CAAC,CAAC;MAEF,IAAIT,OAAO,CAACU,UAAU,EAAE;QACpBN,QAAQ,CAACM,UAAU,CAACV,OAAO,CAACU,UAAU,CAAC;MAC3C;MACA,OAAON,QAAQ,CAACO,UAAU,CAACZ,IAAI,CAAC;IACpC;EAAC;IAAAH,GAAA;IAAAC,KAAA,EAED,SAAAU,gBAAA,EAAkC;MAC9B,IAAMK,OAAO,GAAGC,QAAQ,CAACC,OAAO,CAACC,GAAG,CAACC,6BAA6B,IAAI,GAAG,CAAC;;MAE1E;MACA,IAAIF,OAAO,CAACC,GAAG,CAACE,QAAQ,KAAK,aAAa,EAAE;QACxC;QACA,IAAMC,UAAU,GAAGC,MAAM,CAAC,mBAAmB,CAAC;QAC9C,IAAID,UAAU,EAAE;UACZ,OAAOA,UAAU;QACrB;MACJ;;MAEA;MACA,OAAON,OAAO,IAAI,EAAE;IACxB;EAAC;IAAAhB,GAAA;IAAAC,KAAA,EAED,SAAAY,qBAAA,EAAuC;MACnC,IAAMW,SAAS,GAAGP,QAAQ,CAACC,OAAO,CAACC,GAAG,CAACM,kCAAkC,IAAI,GAAG,CAAC;;MAEjF;MACA,IAAIP,OAAO,CAACC,GAAG,CAACE,QAAQ,KAAK,aAAa,EAAE;QACxC;QACA,IAAMK,YAAY,GAAGH,MAAM,CAAC,wBAAwB,CAAC;QACrD,IAAIG,YAAY,EAAE;UACd,OAAOA,YAAY;QACvB;MACJ;;MAEA;MACA,OAAOF,SAAS,IAAI,CAAC;IACzB;EAAC;AAAA","ignoreList":[]}
@@ -10,7 +10,7 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
10
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
12
  var _pRetry = _interopRequireDefault(require("p-retry"));
13
- var MultiPartUploader = /*#__PURE__*/function () {
13
+ var MultiPartUploader = exports.MultiPartUploader = /*#__PURE__*/function () {
14
14
  function MultiPartUploader(api) {
15
15
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
16
16
  (0, _classCallCheck2.default)(this, MultiPartUploader);
@@ -25,7 +25,7 @@ var MultiPartUploader = /*#__PURE__*/function () {
25
25
  this.chunkSize = Math.max(1024 * 1024 * chunkSize, 1024 * 1024 * 5);
26
26
  this.parallelUploads = Math.min(parallelUploads, 15);
27
27
  }
28
- (0, _createClass2.default)(MultiPartUploader, [{
28
+ return (0, _createClass2.default)(MultiPartUploader, [{
29
29
  key: "uploadFile",
30
30
  value: async function uploadFile(file) {
31
31
  var _this = this;
@@ -202,9 +202,7 @@ var MultiPartUploader = /*#__PURE__*/function () {
202
202
  }
203
203
  }
204
204
  }]);
205
- return MultiPartUploader;
206
205
  }();
207
- exports.MultiPartUploader = MultiPartUploader;
208
206
  var executeWithRetry = function executeWithRetry(execute, options) {
209
207
  return (0, _pRetry.default)(execute, (0, _objectSpread2.default)({
210
208
  maxRetryTime: 300000,
@@ -1 +1 @@
1
- {"version":3,"names":["_pRetry","_interopRequireDefault","require","MultiPartUploader","api","options","arguments","length","undefined","_classCallCheck2","default","_defineProperty2","Map","error","console","chunkSize","parallelUploads","Math","max","min","_createClass2","key","value","uploadFile","file","_this","numberOfParts","ceil","size","upload","createUpload","data","name","type","threads","Promise","all","Array","from","map","uploadNextPart","complete","onProgress","onProgressFn","onError","onErrorFn","sendCompleteRequest","assertIsDefined","completeUpload","fileKey","uploadId","progressListener","part","event","progressTracker","set","partNumber","loaded","uploaded","values","reduce","sum","uploadedSize","sent","total","percentage","round","err","_this2","parts","shift","executeWithRetry","uploadPart","then","_this3","sentSize","nextChunkSize","chunk","slice","log","concat","resolve","reject","throwXHRError","activeConnections","delete","window","navigator","onLine","Error","xhr","XMLHttpRequest","abortXHR","abort","addEventListener","removeListeners","removeEventListener","open","url","onreadystatechange","readyState","status","onerror","ontimeout","onabort","send","message","exports","execute","pRetry","_objectSpread2","maxRetryTime","retries","minTimeout","maxTimeout"],"sources":["MultiPartUploader.ts"],"sourcesContent":["import pRetry from \"p-retry\";\nimport { MultiPartUpload, MultiPartUploadAPI, FilePart } from \"./MultiPartUploadAPI\";\n\ninterface MultiPartUploaderOptions {\n /**\n * Chunk size in MB. Must be >=5MB (enforced by AWS).\n */\n chunkSize?: number;\n /**\n * Number of parallel uploads. Must be >=5 && <=15.\n */\n parallelUploads?: number;\n}\n\ninterface OnProgressCallback {\n (params: { sent: number; total: number; percentage: number }): void;\n}\n\ninterface OnErrorCallback {\n (error: Error): void;\n}\n\nexport class MultiPartUploader {\n private readonly api: MultiPartUploadAPI;\n private readonly chunkSize: number;\n private readonly parallelUploads: number;\n private readonly activeConnections: Map<number, XMLHttpRequest> = new Map();\n private readonly progressTracker: Map<number, number> = new Map();\n private upload: MultiPartUpload | undefined;\n private file: File | undefined;\n private onErrorFn: OnErrorCallback = error => console.error(error);\n private onProgressFn: OnProgressCallback | undefined;\n\n constructor(api: MultiPartUploadAPI, options: MultiPartUploaderOptions = {}) {\n this.api = api;\n const chunkSize = options.chunkSize || 50;\n const parallelUploads = options.parallelUploads || 5;\n\n this.chunkSize = Math.max(1024 * 1024 * chunkSize, 1024 * 1024 * 5);\n this.parallelUploads = Math.min(parallelUploads, 15);\n }\n\n async uploadFile(file: File) {\n this.file = file;\n const numberOfParts = Math.ceil(file.size / this.chunkSize);\n\n try {\n /**\n * Initialize the file upload on AWS S3.\n */\n this.upload = await this.api.createUpload({\n data: { name: file.name, size: file.size, type: file.type },\n numberOfParts\n });\n\n /**\n * Run the defined number of parallel uploads. Each thread will continue to process parts\n * for as long as there are parts to upload. The promise will resolve once there's no more parts to upload.\n */\n const threads = Math.min(numberOfParts, this.parallelUploads);\n await Promise.all(Array.from({ length: threads }).map(() => this.uploadNextPart()));\n\n await this.complete();\n\n return this.upload.file;\n } catch (error) {\n await this.complete(error);\n throw error;\n }\n }\n\n onProgress(onProgress: OnProgressCallback) {\n this.onProgressFn = onProgress;\n return this;\n }\n\n onError(onError: OnErrorCallback) {\n this.onErrorFn = onError;\n return this;\n }\n\n private async complete(error?: Error) {\n if (error) {\n this.onErrorFn(error);\n return;\n }\n\n try {\n await this.sendCompleteRequest();\n } catch (error) {\n this.onErrorFn(error);\n }\n }\n\n private async sendCompleteRequest() {\n this.assertIsDefined(\n this.upload,\n `Upload must be created before calling \"sendCompleteRequest\"!`\n );\n\n return this.api.completeUpload({\n fileKey: this.upload.file.key,\n uploadId: this.upload.uploadId\n });\n }\n\n private progressListener(part: FilePart, event: ProgressEvent<XMLHttpRequestEventTarget>) {\n if (!this.file) {\n return;\n }\n\n this.progressTracker.set(part.partNumber, event.loaded);\n\n const uploaded = Array.from(this.progressTracker.values()).reduce(\n (sum = 0, value) => sum + value\n );\n\n const uploadedSize = Math.min(uploaded, this.file.size);\n\n if (this.onProgressFn) {\n try {\n this.onProgressFn({\n sent: uploadedSize,\n total: this.file.size,\n percentage: Math.round((uploadedSize / this.file.size) * 100)\n });\n } catch (err) {\n console.error(`Error executing the \"onProgress\" callback`, err);\n }\n }\n }\n\n private async uploadNextPart(): Promise<void> {\n if (!this.upload) {\n return;\n }\n\n const part = this.upload.parts.shift();\n\n if (!part) {\n return;\n }\n\n return executeWithRetry(() => this.uploadPart(part)).then(() => this.uploadNextPart());\n }\n\n private uploadPart(part: FilePart) {\n this.assertIsDefined(\n this.upload,\n `Upload must be created before calling \"sendCompleteRequest\"!`\n );\n\n this.assertIsDefined(this.file, `File must be set before calling \"uploadPart\"!`);\n\n const sentSize = (part.partNumber - 1) * this.chunkSize;\n const nextChunkSize = Math.min(sentSize + this.chunkSize, this.file.size);\n const chunk = this.file.slice(sentSize, nextChunkSize, this.upload.file.type);\n console.log(`Chunk for part #${part.partNumber}`, chunk.size);\n\n return new Promise((resolve, reject) => {\n const throwXHRError = (error: Error) => {\n this.activeConnections.delete(part.partNumber);\n reject(error);\n };\n\n if (!window.navigator.onLine) {\n return reject(new Error(\"Browser is offline!\"));\n }\n\n const xhr = new XMLHttpRequest();\n this.activeConnections.set(part.partNumber, xhr);\n const abortXHR = () => xhr.abort();\n\n xhr.upload.addEventListener(\"progress\", event => this.progressListener(part, event));\n\n window.addEventListener(\"offline\", abortXHR);\n const removeListeners = () => {\n window.removeEventListener(\"offline\", abortXHR);\n };\n\n xhr.open(\"PUT\", part.url);\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4 && xhr.status === 200) {\n try {\n this.activeConnections.delete(part.partNumber);\n window.removeEventListener(\"offline\", abortXHR);\n resolve(xhr.status);\n } catch (err) {\n console.error(`Error in \"onreadystatechange\"`, err);\n }\n }\n };\n\n xhr.onerror = () => {\n removeListeners();\n throwXHRError(new Error(`Failed to upload file part #${part.partNumber}`));\n };\n xhr.ontimeout = () => {\n removeListeners();\n throwXHRError(new Error(`Request timed out for file part #${part.partNumber}!`));\n };\n xhr.onabort = () => {\n removeListeners();\n throwXHRError(new Error(`Upload was cancelled for part #${part.partNumber}!`));\n };\n xhr.send(chunk);\n });\n }\n\n private assertIsDefined<T>(upload: T, message: string): asserts upload is NonNullable<T> {\n if (!upload) {\n throw new Error(message);\n }\n }\n}\n\nconst executeWithRetry = (execute: () => void, options?: Parameters<typeof pRetry>[1]) => {\n return pRetry(execute, {\n maxRetryTime: 300000,\n retries: 5,\n minTimeout: 1500,\n maxTimeout: 30000,\n ...options\n });\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_pRetry","_interopRequireDefault","require","MultiPartUploader","exports","api","options","arguments","length","undefined","_classCallCheck2","default","_defineProperty2","Map","error","console","chunkSize","parallelUploads","Math","max","min","_createClass2","key","value","uploadFile","file","_this","numberOfParts","ceil","size","upload","createUpload","data","name","type","threads","Promise","all","Array","from","map","uploadNextPart","complete","onProgress","onProgressFn","onError","onErrorFn","sendCompleteRequest","assertIsDefined","completeUpload","fileKey","uploadId","progressListener","part","event","progressTracker","set","partNumber","loaded","uploaded","values","reduce","sum","uploadedSize","sent","total","percentage","round","err","_this2","parts","shift","executeWithRetry","uploadPart","then","_this3","sentSize","nextChunkSize","chunk","slice","log","concat","resolve","reject","throwXHRError","activeConnections","delete","window","navigator","onLine","Error","xhr","XMLHttpRequest","abortXHR","abort","addEventListener","removeListeners","removeEventListener","open","url","onreadystatechange","readyState","status","onerror","ontimeout","onabort","send","message","execute","pRetry","_objectSpread2","maxRetryTime","retries","minTimeout","maxTimeout"],"sources":["MultiPartUploader.ts"],"sourcesContent":["import pRetry from \"p-retry\";\nimport { MultiPartUpload, MultiPartUploadAPI, FilePart } from \"./MultiPartUploadAPI\";\n\ninterface MultiPartUploaderOptions {\n /**\n * Chunk size in MB. Must be >=5MB (enforced by AWS).\n */\n chunkSize?: number;\n /**\n * Number of parallel uploads. Must be >=5 && <=15.\n */\n parallelUploads?: number;\n}\n\ninterface OnProgressCallback {\n (params: { sent: number; total: number; percentage: number }): void;\n}\n\ninterface OnErrorCallback {\n (error: Error): void;\n}\n\nexport class MultiPartUploader {\n private readonly api: MultiPartUploadAPI;\n private readonly chunkSize: number;\n private readonly parallelUploads: number;\n private readonly activeConnections: Map<number, XMLHttpRequest> = new Map();\n private readonly progressTracker: Map<number, number> = new Map();\n private upload: MultiPartUpload | undefined;\n private file: File | undefined;\n private onErrorFn: OnErrorCallback = error => console.error(error);\n private onProgressFn: OnProgressCallback | undefined;\n\n constructor(api: MultiPartUploadAPI, options: MultiPartUploaderOptions = {}) {\n this.api = api;\n const chunkSize = options.chunkSize || 50;\n const parallelUploads = options.parallelUploads || 5;\n\n this.chunkSize = Math.max(1024 * 1024 * chunkSize, 1024 * 1024 * 5);\n this.parallelUploads = Math.min(parallelUploads, 15);\n }\n\n async uploadFile(file: File) {\n this.file = file;\n const numberOfParts = Math.ceil(file.size / this.chunkSize);\n\n try {\n /**\n * Initialize the file upload on AWS S3.\n */\n this.upload = await this.api.createUpload({\n data: { name: file.name, size: file.size, type: file.type },\n numberOfParts\n });\n\n /**\n * Run the defined number of parallel uploads. Each thread will continue to process parts\n * for as long as there are parts to upload. The promise will resolve once there's no more parts to upload.\n */\n const threads = Math.min(numberOfParts, this.parallelUploads);\n await Promise.all(Array.from({ length: threads }).map(() => this.uploadNextPart()));\n\n await this.complete();\n\n return this.upload.file;\n } catch (error) {\n await this.complete(error);\n throw error;\n }\n }\n\n onProgress(onProgress: OnProgressCallback) {\n this.onProgressFn = onProgress;\n return this;\n }\n\n onError(onError: OnErrorCallback) {\n this.onErrorFn = onError;\n return this;\n }\n\n private async complete(error?: Error) {\n if (error) {\n this.onErrorFn(error);\n return;\n }\n\n try {\n await this.sendCompleteRequest();\n } catch (error) {\n this.onErrorFn(error);\n }\n }\n\n private async sendCompleteRequest() {\n this.assertIsDefined(\n this.upload,\n `Upload must be created before calling \"sendCompleteRequest\"!`\n );\n\n return this.api.completeUpload({\n fileKey: this.upload.file.key,\n uploadId: this.upload.uploadId\n });\n }\n\n private progressListener(part: FilePart, event: ProgressEvent<XMLHttpRequestEventTarget>) {\n if (!this.file) {\n return;\n }\n\n this.progressTracker.set(part.partNumber, event.loaded);\n\n const uploaded = Array.from(this.progressTracker.values()).reduce(\n (sum = 0, value) => sum + value\n );\n\n const uploadedSize = Math.min(uploaded, this.file.size);\n\n if (this.onProgressFn) {\n try {\n this.onProgressFn({\n sent: uploadedSize,\n total: this.file.size,\n percentage: Math.round((uploadedSize / this.file.size) * 100)\n });\n } catch (err) {\n console.error(`Error executing the \"onProgress\" callback`, err);\n }\n }\n }\n\n private async uploadNextPart(): Promise<void> {\n if (!this.upload) {\n return;\n }\n\n const part = this.upload.parts.shift();\n\n if (!part) {\n return;\n }\n\n return executeWithRetry(() => this.uploadPart(part)).then(() => this.uploadNextPart());\n }\n\n private uploadPart(part: FilePart) {\n this.assertIsDefined(\n this.upload,\n `Upload must be created before calling \"sendCompleteRequest\"!`\n );\n\n this.assertIsDefined(this.file, `File must be set before calling \"uploadPart\"!`);\n\n const sentSize = (part.partNumber - 1) * this.chunkSize;\n const nextChunkSize = Math.min(sentSize + this.chunkSize, this.file.size);\n const chunk = this.file.slice(sentSize, nextChunkSize, this.upload.file.type);\n console.log(`Chunk for part #${part.partNumber}`, chunk.size);\n\n return new Promise((resolve, reject) => {\n const throwXHRError = (error: Error) => {\n this.activeConnections.delete(part.partNumber);\n reject(error);\n };\n\n if (!window.navigator.onLine) {\n return reject(new Error(\"Browser is offline!\"));\n }\n\n const xhr = new XMLHttpRequest();\n this.activeConnections.set(part.partNumber, xhr);\n const abortXHR = () => xhr.abort();\n\n xhr.upload.addEventListener(\"progress\", event => this.progressListener(part, event));\n\n window.addEventListener(\"offline\", abortXHR);\n const removeListeners = () => {\n window.removeEventListener(\"offline\", abortXHR);\n };\n\n xhr.open(\"PUT\", part.url);\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4 && xhr.status === 200) {\n try {\n this.activeConnections.delete(part.partNumber);\n window.removeEventListener(\"offline\", abortXHR);\n resolve(xhr.status);\n } catch (err) {\n console.error(`Error in \"onreadystatechange\"`, err);\n }\n }\n };\n\n xhr.onerror = () => {\n removeListeners();\n throwXHRError(new Error(`Failed to upload file part #${part.partNumber}`));\n };\n xhr.ontimeout = () => {\n removeListeners();\n throwXHRError(new Error(`Request timed out for file part #${part.partNumber}!`));\n };\n xhr.onabort = () => {\n removeListeners();\n throwXHRError(new Error(`Upload was cancelled for part #${part.partNumber}!`));\n };\n xhr.send(chunk);\n });\n }\n\n private assertIsDefined<T>(upload: T, message: string): asserts upload is NonNullable<T> {\n if (!upload) {\n throw new Error(message);\n }\n }\n}\n\nconst executeWithRetry = (execute: () => void, options?: Parameters<typeof pRetry>[1]) => {\n return pRetry(execute, {\n maxRetryTime: 300000,\n retries: 5,\n minTimeout: 1500,\n maxTimeout: 30000,\n ...options\n });\n};\n"],"mappings":"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","ignoreList":[]}
@@ -8,11 +8,11 @@ exports.SimpleUploadStrategy = void 0;
8
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
10
  var _graphql = require("./graphql");
11
- var SimpleUploadStrategy = /*#__PURE__*/function () {
11
+ var SimpleUploadStrategy = exports.SimpleUploadStrategy = /*#__PURE__*/function () {
12
12
  function SimpleUploadStrategy() {
13
13
  (0, _classCallCheck2.default)(this, SimpleUploadStrategy);
14
14
  }
15
- (0, _createClass2.default)(SimpleUploadStrategy, [{
15
+ return (0, _createClass2.default)(SimpleUploadStrategy, [{
16
16
  key: "upload",
17
17
  value: async function upload(file, _ref) {
18
18
  var apolloClient = _ref.apolloClient,
@@ -66,8 +66,6 @@ var SimpleUploadStrategy = /*#__PURE__*/function () {
66
66
  });
67
67
  }
68
68
  }]);
69
- return SimpleUploadStrategy;
70
69
  }();
71
- exports.SimpleUploadStrategy = SimpleUploadStrategy;
72
70
 
73
71
  //# sourceMappingURL=SimpleUploadStrategy.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_graphql","require","SimpleUploadStrategy","_classCallCheck2","default","_createClass2","key","value","upload","file","_ref","apolloClient","onProgress","response","query","GET_PRE_SIGNED_POST_PAYLOAD","fetchPolicy","variables","data","size","name","type","keyPrefix","getPreSignedPostPayload","fileManager","error","console","Error","Promise","resolve","reject","formData","window","FormData","Object","keys","fields","forEach","append","xhr","XMLHttpRequest","addEventListener","event","sent","loaded","total","percentage","open","url","send","onload","status","responseText","exports"],"sources":["SimpleUploadStrategy.ts"],"sourcesContent":["import { UploadedFile, UploadOptions } from \"@webiny/app/types\";\nimport { GET_PRE_SIGNED_POST_PAYLOAD } from \"./graphql\";\nimport { FileUploadStrategy } from \"~/index\";\n\ndeclare global {\n interface File {\n key?: string;\n keyPrefix?: string;\n }\n}\n\nexport class SimpleUploadStrategy implements FileUploadStrategy {\n async upload(file: File, { apolloClient, onProgress }: UploadOptions): Promise<UploadedFile> {\n // 1. GET PreSignedPostPayload\n const response = await apolloClient.query({\n query: GET_PRE_SIGNED_POST_PAYLOAD,\n fetchPolicy: \"no-cache\",\n variables: {\n data: {\n size: file.size,\n name: file.name,\n type: file.type,\n key: file.key,\n keyPrefix: file.keyPrefix\n }\n }\n });\n\n const { getPreSignedPostPayload } = response.data.fileManager;\n if (getPreSignedPostPayload.error) {\n console.error(getPreSignedPostPayload);\n throw Error(getPreSignedPostPayload.error);\n }\n\n // 2. upload file to S3\n return new Promise((resolve, reject) => {\n const formData = new window.FormData();\n Object.keys(getPreSignedPostPayload.data.data.fields).forEach(key => {\n formData.append(key, getPreSignedPostPayload.data.data.fields[key]);\n });\n\n formData.append(\"file\", file);\n\n const xhr = new window.XMLHttpRequest();\n xhr.upload.addEventListener(\n \"progress\",\n event => {\n if (onProgress) {\n onProgress({\n sent: event.loaded,\n total: file.size,\n percentage: (event.loaded / file.size) * 100\n });\n }\n },\n false\n );\n xhr.open(\"POST\", getPreSignedPostPayload.data.data.url, true);\n xhr.send(formData);\n xhr.onload = function () {\n if (this.status === 204) {\n resolve(getPreSignedPostPayload.data.file);\n return;\n }\n\n reject(this.responseText);\n };\n });\n }\n}\n"],"mappings":";;;;;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AAAwD,IAU3CC,oBAAoB;EAAA,SAAAA,qBAAA;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAF,oBAAA;EAAA;EAAA,IAAAG,aAAA,CAAAD,OAAA,EAAAF,oBAAA;IAAAI,GAAA;IAAAC,KAAA,EAC7B,eAAAC,OAAaC,IAAU,EAAAC,IAAA,EAAsE;MAAA,IAAlEC,YAAY,GAAAD,IAAA,CAAZC,YAAY;QAAEC,UAAU,GAAAF,IAAA,CAAVE,UAAU;MAC/C;MACA,IAAMC,QAAQ,GAAG,MAAMF,YAAY,CAACG,KAAK,CAAC;QACtCA,KAAK,EAAEC,oCAA2B;QAClCC,WAAW,EAAE,UAAU;QACvBC,SAAS,EAAE;UACPC,IAAI,EAAE;YACFC,IAAI,EAAEV,IAAI,CAACU,IAAI;YACfC,IAAI,EAAEX,IAAI,CAACW,IAAI;YACfC,IAAI,EAAEZ,IAAI,CAACY,IAAI;YACff,GAAG,EAAEG,IAAI,CAACH,GAAG;YACbgB,SAAS,EAAEb,IAAI,CAACa;UACpB;QACJ;MACJ,CAAC,CAAC;MAEF,IAAQC,uBAAuB,GAAKV,QAAQ,CAACK,IAAI,CAACM,WAAW,CAArDD,uBAAuB;MAC/B,IAAIA,uBAAuB,CAACE,KAAK,EAAE;QAC/BC,OAAO,CAACD,KAAK,CAACF,uBAAuB,CAAC;QACtC,MAAMI,KAAK,CAACJ,uBAAuB,CAACE,KAAK,CAAC;MAC9C;;MAEA;MACA,OAAO,IAAIG,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;QACpC,IAAMC,QAAQ,GAAG,IAAIC,MAAM,CAACC,QAAQ,CAAC,CAAC;QACtCC,MAAM,CAACC,IAAI,CAACZ,uBAAuB,CAACL,IAAI,CAACA,IAAI,CAACkB,MAAM,CAAC,CAACC,OAAO,CAAC,UAAA/B,GAAG,EAAI;UACjEyB,QAAQ,CAACO,MAAM,CAAChC,GAAG,EAAEiB,uBAAuB,CAACL,IAAI,CAACA,IAAI,CAACkB,MAAM,CAAC9B,GAAG,CAAC,CAAC;QACvE,CAAC,CAAC;QAEFyB,QAAQ,CAACO,MAAM,CAAC,MAAM,EAAE7B,IAAI,CAAC;QAE7B,IAAM8B,GAAG,GAAG,IAAIP,MAAM,CAACQ,cAAc,CAAC,CAAC;QACvCD,GAAG,CAAC/B,MAAM,CAACiC,gBAAgB,CACvB,UAAU,EACV,UAAAC,KAAK,EAAI;UACL,IAAI9B,UAAU,EAAE;YACZA,UAAU,CAAC;cACP+B,IAAI,EAAED,KAAK,CAACE,MAAM;cAClBC,KAAK,EAAEpC,IAAI,CAACU,IAAI;cAChB2B,UAAU,EAAGJ,KAAK,CAACE,MAAM,GAAGnC,IAAI,CAACU,IAAI,GAAI;YAC7C,CAAC,CAAC;UACN;QACJ,CAAC,EACD,KACJ,CAAC;QACDoB,GAAG,CAACQ,IAAI,CAAC,MAAM,EAAExB,uBAAuB,CAACL,IAAI,CAACA,IAAI,CAAC8B,GAAG,EAAE,IAAI,CAAC;QAC7DT,GAAG,CAACU,IAAI,CAAClB,QAAQ,CAAC;QAClBQ,GAAG,CAACW,MAAM,GAAG,YAAY;UACrB,IAAI,IAAI,CAACC,MAAM,KAAK,GAAG,EAAE;YACrBtB,OAAO,CAACN,uBAAuB,CAACL,IAAI,CAACT,IAAI,CAAC;YAC1C;UACJ;UAEAqB,MAAM,CAAC,IAAI,CAACsB,YAAY,CAAC;QAC7B,CAAC;MACL,CAAC,CAAC;IACN;EAAC;EAAA,OAAAlD,oBAAA;AAAA;AAAAmD,OAAA,CAAAnD,oBAAA,GAAAA,oBAAA"}
1
+ {"version":3,"names":["_graphql","require","SimpleUploadStrategy","exports","_classCallCheck2","default","_createClass2","key","value","upload","file","_ref","apolloClient","onProgress","response","query","GET_PRE_SIGNED_POST_PAYLOAD","fetchPolicy","variables","data","size","name","type","keyPrefix","getPreSignedPostPayload","fileManager","error","console","Error","Promise","resolve","reject","formData","window","FormData","Object","keys","fields","forEach","append","xhr","XMLHttpRequest","addEventListener","event","sent","loaded","total","percentage","open","url","send","onload","status","responseText"],"sources":["SimpleUploadStrategy.ts"],"sourcesContent":["import { UploadedFile, UploadOptions } from \"@webiny/app/types\";\nimport { GET_PRE_SIGNED_POST_PAYLOAD } from \"./graphql\";\nimport { FileUploadStrategy } from \"~/index\";\n\ndeclare global {\n interface File {\n key?: string;\n keyPrefix?: string;\n }\n}\n\nexport class SimpleUploadStrategy implements FileUploadStrategy {\n async upload(file: File, { apolloClient, onProgress }: UploadOptions): Promise<UploadedFile> {\n // 1. GET PreSignedPostPayload\n const response = await apolloClient.query({\n query: GET_PRE_SIGNED_POST_PAYLOAD,\n fetchPolicy: \"no-cache\",\n variables: {\n data: {\n size: file.size,\n name: file.name,\n type: file.type,\n key: file.key,\n keyPrefix: file.keyPrefix\n }\n }\n });\n\n const { getPreSignedPostPayload } = response.data.fileManager;\n if (getPreSignedPostPayload.error) {\n console.error(getPreSignedPostPayload);\n throw Error(getPreSignedPostPayload.error);\n }\n\n // 2. upload file to S3\n return new Promise((resolve, reject) => {\n const formData = new window.FormData();\n Object.keys(getPreSignedPostPayload.data.data.fields).forEach(key => {\n formData.append(key, getPreSignedPostPayload.data.data.fields[key]);\n });\n\n formData.append(\"file\", file);\n\n const xhr = new window.XMLHttpRequest();\n xhr.upload.addEventListener(\n \"progress\",\n event => {\n if (onProgress) {\n onProgress({\n sent: event.loaded,\n total: file.size,\n percentage: (event.loaded / file.size) * 100\n });\n }\n },\n false\n );\n xhr.open(\"POST\", getPreSignedPostPayload.data.data.url, true);\n xhr.send(formData);\n xhr.onload = function () {\n if (this.status === 204) {\n resolve(getPreSignedPostPayload.data.file);\n return;\n }\n\n reject(this.responseText);\n };\n });\n }\n}\n"],"mappings":";;;;;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AAAwD,IAU3CC,oBAAoB,GAAAC,OAAA,CAAAD,oBAAA;EAAA,SAAAA,qBAAA;IAAA,IAAAE,gBAAA,CAAAC,OAAA,QAAAH,oBAAA;EAAA;EAAA,WAAAI,aAAA,CAAAD,OAAA,EAAAH,oBAAA;IAAAK,GAAA;IAAAC,KAAA,EAC7B,eAAAC,OAAaC,IAAU,EAAAC,IAAA,EAAsE;MAAA,IAAlEC,YAAY,GAAAD,IAAA,CAAZC,YAAY;QAAEC,UAAU,GAAAF,IAAA,CAAVE,UAAU;MAC/C;MACA,IAAMC,QAAQ,GAAG,MAAMF,YAAY,CAACG,KAAK,CAAC;QACtCA,KAAK,EAAEC,oCAA2B;QAClCC,WAAW,EAAE,UAAU;QACvBC,SAAS,EAAE;UACPC,IAAI,EAAE;YACFC,IAAI,EAAEV,IAAI,CAACU,IAAI;YACfC,IAAI,EAAEX,IAAI,CAACW,IAAI;YACfC,IAAI,EAAEZ,IAAI,CAACY,IAAI;YACff,GAAG,EAAEG,IAAI,CAACH,GAAG;YACbgB,SAAS,EAAEb,IAAI,CAACa;UACpB;QACJ;MACJ,CAAC,CAAC;MAEF,IAAQC,uBAAuB,GAAKV,QAAQ,CAACK,IAAI,CAACM,WAAW,CAArDD,uBAAuB;MAC/B,IAAIA,uBAAuB,CAACE,KAAK,EAAE;QAC/BC,OAAO,CAACD,KAAK,CAACF,uBAAuB,CAAC;QACtC,MAAMI,KAAK,CAACJ,uBAAuB,CAACE,KAAK,CAAC;MAC9C;;MAEA;MACA,OAAO,IAAIG,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;QACpC,IAAMC,QAAQ,GAAG,IAAIC,MAAM,CAACC,QAAQ,CAAC,CAAC;QACtCC,MAAM,CAACC,IAAI,CAACZ,uBAAuB,CAACL,IAAI,CAACA,IAAI,CAACkB,MAAM,CAAC,CAACC,OAAO,CAAC,UAAA/B,GAAG,EAAI;UACjEyB,QAAQ,CAACO,MAAM,CAAChC,GAAG,EAAEiB,uBAAuB,CAACL,IAAI,CAACA,IAAI,CAACkB,MAAM,CAAC9B,GAAG,CAAC,CAAC;QACvE,CAAC,CAAC;QAEFyB,QAAQ,CAACO,MAAM,CAAC,MAAM,EAAE7B,IAAI,CAAC;QAE7B,IAAM8B,GAAG,GAAG,IAAIP,MAAM,CAACQ,cAAc,CAAC,CAAC;QACvCD,GAAG,CAAC/B,MAAM,CAACiC,gBAAgB,CACvB,UAAU,EACV,UAAAC,KAAK,EAAI;UACL,IAAI9B,UAAU,EAAE;YACZA,UAAU,CAAC;cACP+B,IAAI,EAAED,KAAK,CAACE,MAAM;cAClBC,KAAK,EAAEpC,IAAI,CAACU,IAAI;cAChB2B,UAAU,EAAGJ,KAAK,CAACE,MAAM,GAAGnC,IAAI,CAACU,IAAI,GAAI;YAC7C,CAAC,CAAC;UACN;QACJ,CAAC,EACD,KACJ,CAAC;QACDoB,GAAG,CAACQ,IAAI,CAAC,MAAM,EAAExB,uBAAuB,CAACL,IAAI,CAACA,IAAI,CAAC8B,GAAG,EAAE,IAAI,CAAC;QAC7DT,GAAG,CAACU,IAAI,CAAClB,QAAQ,CAAC;QAClBQ,GAAG,CAACW,MAAM,GAAG,YAAY;UACrB,IAAI,IAAI,CAACC,MAAM,KAAK,GAAG,EAAE;YACrBtB,OAAO,CAACN,uBAAuB,CAACL,IAAI,CAACT,IAAI,CAAC;YAC1C;UACJ;UAEAqB,MAAM,CAAC,IAAI,CAACsB,YAAY,CAAC;QAC7B,CAAC;MACL,CAAC,CAAC;IACN;EAAC;AAAA","ignoreList":[]}
package/graphql.js CHANGED
@@ -8,7 +8,6 @@ exports.GET_PRE_SIGNED_POST_PAYLOAD = void 0;
8
8
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
9
  var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
10
10
  var _templateObject;
11
- var GET_PRE_SIGNED_POST_PAYLOAD = (0, _graphqlTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n query getPreSignedPostPayload($data: PreSignedPostPayloadInput!) {\n fileManager {\n getPreSignedPostPayload(data: $data) {\n data {\n data\n file {\n id\n type\n name\n size\n key\n }\n }\n error {\n message\n }\n }\n }\n }\n"])));
12
- exports.GET_PRE_SIGNED_POST_PAYLOAD = GET_PRE_SIGNED_POST_PAYLOAD;
11
+ var GET_PRE_SIGNED_POST_PAYLOAD = exports.GET_PRE_SIGNED_POST_PAYLOAD = (0, _graphqlTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n query getPreSignedPostPayload($data: PreSignedPostPayloadInput!) {\n fileManager {\n getPreSignedPostPayload(data: $data) {\n data {\n data\n file {\n id\n type\n name\n size\n key\n }\n }\n error {\n message\n }\n }\n }\n }\n"])));
13
12
 
14
13
  //# sourceMappingURL=graphql.js.map
package/graphql.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_graphqlTag","_interopRequireDefault","require","_templateObject","GET_PRE_SIGNED_POST_PAYLOAD","gql","_taggedTemplateLiteral2","default","exports"],"sources":["graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\n\nexport const GET_PRE_SIGNED_POST_PAYLOAD = gql`\n query getPreSignedPostPayload($data: PreSignedPostPayloadInput!) {\n fileManager {\n getPreSignedPostPayload(data: $data) {\n data {\n data\n file {\n id\n type\n name\n size\n key\n }\n }\n error {\n message\n }\n }\n }\n }\n`;\n"],"mappings":";;;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8B,IAAAC,eAAA;AAEvB,IAAMC,2BAA2B,OAAGC,mBAAG,EAAAF,eAAA,KAAAA,eAAA,OAAAG,uBAAA,CAAAC,OAAA,mhBAoB7C;AAACC,OAAA,CAAAJ,2BAAA,GAAAA,2BAAA"}
1
+ {"version":3,"names":["_graphqlTag","_interopRequireDefault","require","_templateObject","GET_PRE_SIGNED_POST_PAYLOAD","exports","gql","_taggedTemplateLiteral2","default"],"sources":["graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\n\nexport const GET_PRE_SIGNED_POST_PAYLOAD = gql`\n query getPreSignedPostPayload($data: PreSignedPostPayloadInput!) {\n fileManager {\n getPreSignedPostPayload(data: $data) {\n data {\n data\n file {\n id\n type\n name\n size\n key\n }\n }\n error {\n message\n }\n }\n }\n }\n`;\n"],"mappings":";;;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8B,IAAAC,eAAA;AAEvB,IAAMC,2BAA2B,GAAAC,OAAA,CAAAD,2BAAA,OAAGE,mBAAG,EAAAH,eAAA,KAAAA,eAAA,OAAAI,uBAAA,CAAAC,OAAA,mhBAoB7C","ignoreList":[]}
package/index.js CHANGED
@@ -10,14 +10,14 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
  var _SimpleUploadStrategy = require("./SimpleUploadStrategy");
12
12
  var _MultiPartUploadStrategy = require("./MultiPartUploadStrategy");
13
- var _default = function _default() {
13
+ var _default = exports.default = function _default() {
14
14
  var S3FileUploader = /*#__PURE__*/function () {
15
15
  function S3FileUploader() {
16
16
  (0, _classCallCheck2.default)(this, S3FileUploader);
17
17
  (0, _defineProperty2.default)(this, "type", "file-uploader");
18
18
  (0, _defineProperty2.default)(this, "name", "file-uploader");
19
19
  }
20
- (0, _createClass2.default)(S3FileUploader, [{
20
+ return (0, _createClass2.default)(S3FileUploader, [{
21
21
  key: "upload",
22
22
  value: function upload(file, options) {
23
23
  // Use "simple" strategy for files smaller than ~100MB
@@ -28,10 +28,8 @@ var _default = function _default() {
28
28
  return strategy.upload(file, options);
29
29
  }
30
30
  }]);
31
- return S3FileUploader;
32
31
  }();
33
32
  return new S3FileUploader();
34
33
  };
35
- exports.default = _default;
36
34
 
37
35
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_SimpleUploadStrategy","require","_MultiPartUploadStrategy","_default","S3FileUploader","_classCallCheck2","default","_defineProperty2","_createClass2","key","value","upload","file","options","multiPartThreshold","window","simple","size","strategy","SimpleUploadStrategy","MultiPartUploadStrategy","exports"],"sources":["index.ts"],"sourcesContent":["import { FileUploaderPlugin, UploadOptions } from \"@webiny/app/types\";\nimport { SimpleUploadStrategy } from \"~/SimpleUploadStrategy\";\nimport { MultiPartUploadStrategy } from \"~/MultiPartUploadStrategy\";\n\nexport interface FileUploadStrategy {\n upload: FileUploaderPlugin[\"upload\"];\n}\n\nexport default (): FileUploaderPlugin => {\n class S3FileUploader implements FileUploaderPlugin {\n public readonly type = \"file-uploader\";\n public readonly name = \"file-uploader\";\n\n upload(file: File, options: UploadOptions) {\n // Use \"simple\" strategy for files smaller than ~100MB\n // @ts-expect-error\n const multiPartThreshold = window[\"fmUploadMultiPartThreshold\"] ?? 100;\n const simple = file.size < multiPartThreshold * 1024 * 1024;\n\n const strategy: FileUploadStrategy = simple\n ? new SimpleUploadStrategy()\n : new MultiPartUploadStrategy();\n\n return strategy.upload(file, options);\n }\n }\n\n return new S3FileUploader();\n};\n"],"mappings":";;;;;;;;;;AACA,IAAAA,qBAAA,GAAAC,OAAA;AACA,IAAAC,wBAAA,GAAAD,OAAA;AAAoE,IAAAE,QAAA,GAMrD,SAAAA,SAAA,EAA0B;EAAA,IAC/BC,cAAc;IAAA,SAAAA,eAAA;MAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAF,cAAA;MAAA,IAAAG,gBAAA,CAAAD,OAAA,gBACO,eAAe;MAAA,IAAAC,gBAAA,CAAAD,OAAA,gBACf,eAAe;IAAA;IAAA,IAAAE,aAAA,CAAAF,OAAA,EAAAF,cAAA;MAAAK,GAAA;MAAAC,KAAA,EAEtC,SAAAC,OAAOC,IAAU,EAAEC,OAAsB,EAAE;QACvC;QACA;QACA,IAAMC,kBAAkB,GAAGC,MAAM,CAAC,4BAA4B,CAAC,IAAI,GAAG;QACtE,IAAMC,MAAM,GAAGJ,IAAI,CAACK,IAAI,GAAGH,kBAAkB,GAAG,IAAI,GAAG,IAAI;QAE3D,IAAMI,QAA4B,GAAGF,MAAM,GACrC,IAAIG,0CAAoB,CAAC,CAAC,GAC1B,IAAIC,gDAAuB,CAAC,CAAC;QAEnC,OAAOF,QAAQ,CAACP,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC;MACzC;IAAC;IAAA,OAAAT,cAAA;EAAA;EAGL,OAAO,IAAIA,cAAc,CAAC,CAAC;AAC/B,CAAC;AAAAiB,OAAA,CAAAf,OAAA,GAAAH,QAAA"}
1
+ {"version":3,"names":["_SimpleUploadStrategy","require","_MultiPartUploadStrategy","_default","exports","default","S3FileUploader","_classCallCheck2","_defineProperty2","_createClass2","key","value","upload","file","options","multiPartThreshold","window","simple","size","strategy","SimpleUploadStrategy","MultiPartUploadStrategy"],"sources":["index.ts"],"sourcesContent":["import { FileUploaderPlugin, UploadOptions } from \"@webiny/app/types\";\nimport { SimpleUploadStrategy } from \"~/SimpleUploadStrategy\";\nimport { MultiPartUploadStrategy } from \"~/MultiPartUploadStrategy\";\n\nexport interface FileUploadStrategy {\n upload: FileUploaderPlugin[\"upload\"];\n}\n\nexport default (): FileUploaderPlugin => {\n class S3FileUploader implements FileUploaderPlugin {\n public readonly type = \"file-uploader\";\n public readonly name = \"file-uploader\";\n\n upload(file: File, options: UploadOptions) {\n // Use \"simple\" strategy for files smaller than ~100MB\n // @ts-expect-error\n const multiPartThreshold = window[\"fmUploadMultiPartThreshold\"] ?? 100;\n const simple = file.size < multiPartThreshold * 1024 * 1024;\n\n const strategy: FileUploadStrategy = simple\n ? new SimpleUploadStrategy()\n : new MultiPartUploadStrategy();\n\n return strategy.upload(file, options);\n }\n }\n\n return new S3FileUploader();\n};\n"],"mappings":";;;;;;;;;;AACA,IAAAA,qBAAA,GAAAC,OAAA;AACA,IAAAC,wBAAA,GAAAD,OAAA;AAAoE,IAAAE,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAMrD,SAAAF,SAAA,EAA0B;EAAA,IAC/BG,cAAc;IAAA,SAAAA,eAAA;MAAA,IAAAC,gBAAA,CAAAF,OAAA,QAAAC,cAAA;MAAA,IAAAE,gBAAA,CAAAH,OAAA,gBACO,eAAe;MAAA,IAAAG,gBAAA,CAAAH,OAAA,gBACf,eAAe;IAAA;IAAA,WAAAI,aAAA,CAAAJ,OAAA,EAAAC,cAAA;MAAAI,GAAA;MAAAC,KAAA,EAEtC,SAAAC,OAAOC,IAAU,EAAEC,OAAsB,EAAE;QACvC;QACA;QACA,IAAMC,kBAAkB,GAAGC,MAAM,CAAC,4BAA4B,CAAC,IAAI,GAAG;QACtE,IAAMC,MAAM,GAAGJ,IAAI,CAACK,IAAI,GAAGH,kBAAkB,GAAG,IAAI,GAAG,IAAI;QAE3D,IAAMI,QAA4B,GAAGF,MAAM,GACrC,IAAIG,0CAAoB,CAAC,CAAC,GAC1B,IAAIC,gDAAuB,CAAC,CAAC;QAEnC,OAAOF,QAAQ,CAACP,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC;MACzC;IAAC;EAAA;EAGL,OAAO,IAAIR,cAAc,CAAC,CAAC;AAC/B,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-file-manager-s3",
3
- "version": "5.40.0-beta.2",
3
+ "version": "5.40.0-beta.3",
4
4
  "main": "index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -10,16 +10,16 @@
10
10
  "author": "Webiny Ltd",
11
11
  "license": "MIT",
12
12
  "dependencies": {
13
- "@webiny/app": "5.40.0-beta.2",
13
+ "@webiny/app": "5.40.0-beta.3",
14
14
  "graphql-tag": "2.12.6",
15
15
  "p-retry": "4.6.2"
16
16
  },
17
17
  "devDependencies": {
18
- "@babel/cli": "7.22.6",
19
- "@babel/core": "7.22.8",
20
- "@webiny/cli": "5.40.0-beta.2",
21
- "@webiny/project-utils": "5.40.0-beta.2",
22
- "rimraf": "3.0.2",
18
+ "@babel/cli": "7.24.1",
19
+ "@babel/core": "7.24.3",
20
+ "@webiny/cli": "5.40.0-beta.3",
21
+ "@webiny/project-utils": "5.40.0-beta.3",
22
+ "rimraf": "5.0.5",
23
23
  "typescript": "4.7.4"
24
24
  },
25
25
  "publishConfig": {
@@ -30,5 +30,5 @@
30
30
  "build": "yarn webiny run build",
31
31
  "watch": "yarn webiny run watch"
32
32
  },
33
- "gitHead": "15e414a228687140ce2f30bd2f55763368e99827"
33
+ "gitHead": "638d8b84063906cd1aa979ed6e0487ad26fbcf2f"
34
34
  }