@webiny/app-file-manager-s3 5.39.0-beta.1 → 5.39.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,8 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.MultiPartUploadGraphQLAPI = void 0;
8
8
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
- var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
10
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
11
  var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
@@ -19,76 +17,34 @@ var MultiPartUploadGraphQLAPI = /*#__PURE__*/function () {
19
17
  }
20
18
  (0, _createClass2.default)(MultiPartUploadGraphQLAPI, [{
21
19
  key: "createUpload",
22
- value: function () {
23
- var _createUpload = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(params) {
24
- var _yield$this$client$mu, data, errors;
25
- return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
26
- while (1) switch (_context.prev = _context.next) {
27
- case 0:
28
- _context.next = 2;
29
- return this.client.mutate({
30
- mutation: CREATE_UPLOAD,
31
- variables: params
32
- });
33
- case 2:
34
- _yield$this$client$mu = _context.sent;
35
- data = _yield$this$client$mu.data;
36
- errors = _yield$this$client$mu.errors;
37
- if (data) {
38
- _context.next = 8;
39
- break;
40
- }
41
- console.error(errors);
42
- throw new Error("Failed to initialize a multi-part file upload!");
43
- case 8:
44
- return _context.abrupt("return", data.fileManager.createMultiPartUpload.data);
45
- case 9:
46
- case "end":
47
- return _context.stop();
48
- }
49
- }, _callee, this);
50
- }));
51
- function createUpload(_x) {
52
- return _createUpload.apply(this, arguments);
20
+ value: async function createUpload(params) {
21
+ var _await$this$client$mu = await this.client.mutate({
22
+ mutation: CREATE_UPLOAD,
23
+ variables: params
24
+ }),
25
+ data = _await$this$client$mu.data,
26
+ errors = _await$this$client$mu.errors;
27
+ if (!data) {
28
+ console.error(errors);
29
+ throw new Error("Failed to initialize a multi-part file upload!");
53
30
  }
54
- return createUpload;
55
- }()
31
+ return data.fileManager.createMultiPartUpload.data;
32
+ }
56
33
  }, {
57
34
  key: "completeUpload",
58
- value: function () {
59
- var _completeUpload = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee2(params) {
60
- var _yield$this$client$mu2, data, errors;
61
- return (0, _regeneratorRuntime2.default)().wrap(function _callee2$(_context2) {
62
- while (1) switch (_context2.prev = _context2.next) {
63
- case 0:
64
- _context2.next = 2;
65
- return this.client.mutate({
66
- mutation: COMPLETE_UPLOAD,
67
- variables: params
68
- });
69
- case 2:
70
- _yield$this$client$mu2 = _context2.sent;
71
- data = _yield$this$client$mu2.data;
72
- errors = _yield$this$client$mu2.errors;
73
- if (data) {
74
- _context2.next = 8;
75
- break;
76
- }
77
- console.error(errors);
78
- throw new Error("Failed to complete a multi-part file upload!");
79
- case 8:
80
- return _context2.abrupt("return", data.fileManager.completeMultiPartUpload.data);
81
- case 9:
82
- case "end":
83
- return _context2.stop();
84
- }
85
- }, _callee2, this);
86
- }));
87
- function completeUpload(_x2) {
88
- return _completeUpload.apply(this, arguments);
35
+ value: async function completeUpload(params) {
36
+ var _await$this$client$mu2 = await this.client.mutate({
37
+ mutation: COMPLETE_UPLOAD,
38
+ variables: params
39
+ }),
40
+ data = _await$this$client$mu2.data,
41
+ errors = _await$this$client$mu2.errors;
42
+ if (!data) {
43
+ console.error(errors);
44
+ throw new Error("Failed to complete a multi-part file upload!");
89
45
  }
90
- return completeUpload;
91
- }()
46
+ return data.fileManager.completeMultiPartUpload.data;
47
+ }
92
48
  }]);
93
49
  return MultiPartUploadGraphQLAPI;
94
50
  }();
@@ -1 +1 @@
1
- {"version":3,"names":["_graphqlTag","_interopRequireDefault","require","_templateObject","_templateObject2","MultiPartUploadGraphQLAPI","client","_classCallCheck2","default","_createClass2","key","value","_createUpload","_asyncToGenerator2","_regeneratorRuntime2","mark","_callee","params","_yield$this$client$mu","data","errors","wrap","_callee$","_context","prev","next","mutate","mutation","CREATE_UPLOAD","variables","sent","console","error","Error","abrupt","fileManager","createMultiPartUpload","stop","createUpload","_x","apply","arguments","_completeUpload","_callee2","_yield$this$client$mu2","_callee2$","_context2","COMPLETE_UPLOAD","completeMultiPartUpload","completeUpload","_x2","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":"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"}
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"}
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.MultiPartUploadStrategy = void 0;
8
- var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
9
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
10
  var _MultiPartUploader = require("./MultiPartUploader");
@@ -17,32 +15,17 @@ var MultiPartUploadStrategy = /*#__PURE__*/function () {
17
15
  }
18
16
  (0, _createClass2.default)(MultiPartUploadStrategy, [{
19
17
  key: "upload",
20
- value: function () {
21
- var _upload = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(file, options) {
22
- var api, uploader;
23
- return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
24
- while (1) switch (_context.prev = _context.next) {
25
- case 0:
26
- api = new _MultiPartUploadGraphQLAPI.MultiPartUploadGraphQLAPI(options.apolloClient);
27
- uploader = new _MultiPartUploader.MultiPartUploader(api, {
28
- chunkSize: this.detectChunkSize(),
29
- parallelUploads: this.detectParallelChunks()
30
- });
31
- if (options.onProgress) {
32
- uploader.onProgress(options.onProgress);
33
- }
34
- return _context.abrupt("return", uploader.uploadFile(file));
35
- case 4:
36
- case "end":
37
- return _context.stop();
38
- }
39
- }, _callee, this);
40
- }));
41
- function upload(_x, _x2) {
42
- return _upload.apply(this, arguments);
18
+ value: async function upload(file, options) {
19
+ var api = new _MultiPartUploadGraphQLAPI.MultiPartUploadGraphQLAPI(options.apolloClient);
20
+ var uploader = new _MultiPartUploader.MultiPartUploader(api, {
21
+ chunkSize: this.detectChunkSize(),
22
+ parallelUploads: this.detectParallelChunks()
23
+ });
24
+ if (options.onProgress) {
25
+ uploader.onProgress(options.onProgress);
43
26
  }
44
- return upload;
45
- }()
27
+ return uploader.uploadFile(file);
28
+ }
46
29
  }, {
47
30
  key: "detectChunkSize",
48
31
  value: function detectChunkSize() {
@@ -50,7 +33,7 @@ var MultiPartUploadStrategy = /*#__PURE__*/function () {
50
33
 
51
34
  // For dev purposes, we take this global var into consideration.
52
35
  if (process.env.NODE_ENV === "development") {
53
- // @ts-ignore
36
+ // @ts-expect-error
54
37
  var windowSize = window["fmUploadChunkSize"];
55
38
  if (windowSize) {
56
39
  return windowSize;
@@ -67,7 +50,7 @@ var MultiPartUploadStrategy = /*#__PURE__*/function () {
67
50
 
68
51
  // For dev purposes, we take this global var into consideration.
69
52
  if (process.env.NODE_ENV === "development") {
70
- // @ts-ignore
53
+ // @ts-expect-error
71
54
  var windowChunks = window["fmUploadParallelChunks"];
72
55
  if (windowChunks) {
73
56
  return windowChunks;
@@ -1 +1 @@
1
- {"version":3,"names":["_MultiPartUploader","require","_MultiPartUploadGraphQLAPI","MultiPartUploadStrategy","_classCallCheck2","default","_createClass2","key","value","_upload","_asyncToGenerator2","_regeneratorRuntime2","mark","_callee","file","options","api","uploader","wrap","_callee$","_context","prev","next","MultiPartUploadGraphQLAPI","apolloClient","MultiPartUploader","chunkSize","detectChunkSize","parallelUploads","detectParallelChunks","onProgress","abrupt","uploadFile","stop","upload","_x","_x2","apply","arguments","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-ignore\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-ignore\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;MAAA,IAAAC,OAAA,OAAAC,kBAAA,CAAAL,OAAA,oBAAAM,oBAAA,CAAAN,OAAA,IAAAO,IAAA,CAChC,SAAAC,QAAaC,IAAU,EAAEC,OAAsB;QAAA,IAAAC,GAAA,EAAAC,QAAA;QAAA,WAAAN,oBAAA,CAAAN,OAAA,IAAAa,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cACrCN,GAAG,GAAG,IAAIO,oDAAyB,CAACR,OAAO,CAACS,YAAY,CAAC;cAEzDP,QAAQ,GAAG,IAAIQ,oCAAiB,CAACT,GAAG,EAAE;gBACxCU,SAAS,EAAE,IAAI,CAACC,eAAe,CAAC,CAAC;gBACjCC,eAAe,EAAE,IAAI,CAACC,oBAAoB,CAAC;cAC/C,CAAC,CAAC;cAEF,IAAId,OAAO,CAACe,UAAU,EAAE;gBACpBb,QAAQ,CAACa,UAAU,CAACf,OAAO,CAACe,UAAU,CAAC;cAC3C;cAAC,OAAAV,QAAA,CAAAW,MAAA,WACMd,QAAQ,CAACe,UAAU,CAAClB,IAAI,CAAC;YAAA;YAAA;cAAA,OAAAM,QAAA,CAAAa,IAAA;UAAA;QAAA,GAAApB,OAAA;MAAA,CACnC;MAAA,SAAAqB,OAAAC,EAAA,EAAAC,GAAA;QAAA,OAAA3B,OAAA,CAAA4B,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAAJ,MAAA;IAAA;EAAA;IAAA3B,GAAA;IAAAC,KAAA,EAED,SAAAmB,gBAAA,EAAkC;MAC9B,IAAMY,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;IAAAhC,GAAA;IAAAC,KAAA,EAED,SAAAqB,qBAAA,EAAuC;MACnC,IAAMkB,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,OAAA5C,uBAAA;AAAA;AAAA+C,OAAA,CAAA/C,uBAAA,GAAAA,uBAAA"}
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"}
@@ -6,8 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.MultiPartUploader = void 0;
8
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
- var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
10
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
@@ -29,61 +27,40 @@ var MultiPartUploader = /*#__PURE__*/function () {
29
27
  }
30
28
  (0, _createClass2.default)(MultiPartUploader, [{
31
29
  key: "uploadFile",
32
- value: function () {
33
- var _uploadFile = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(file) {
34
- var _this = this;
35
- var numberOfParts, threads;
36
- return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
37
- while (1) switch (_context.prev = _context.next) {
38
- case 0:
39
- this.file = file;
40
- numberOfParts = Math.ceil(file.size / this.chunkSize);
41
- _context.prev = 2;
42
- _context.next = 5;
43
- return this.api.createUpload({
44
- data: {
45
- name: file.name,
46
- size: file.size,
47
- type: file.type
48
- },
49
- numberOfParts: numberOfParts
50
- });
51
- case 5:
52
- this.upload = _context.sent;
53
- /**
54
- * Run the defined number of parallel uploads. Each thread will continue to process parts
55
- * for as long as there are parts to upload. The promise will resolve once there's no more parts to upload.
56
- */
57
- threads = Math.min(numberOfParts, this.parallelUploads);
58
- _context.next = 9;
59
- return Promise.all(Array.from({
60
- length: threads
61
- }).map(function () {
62
- return _this.uploadNextPart();
63
- }));
64
- case 9:
65
- _context.next = 11;
66
- return this.complete();
67
- case 11:
68
- return _context.abrupt("return", this.upload.file);
69
- case 14:
70
- _context.prev = 14;
71
- _context.t0 = _context["catch"](2);
72
- _context.next = 18;
73
- return this.complete(_context.t0);
74
- case 18:
75
- throw _context.t0;
76
- case 19:
77
- case "end":
78
- return _context.stop();
79
- }
80
- }, _callee, this, [[2, 14]]);
81
- }));
82
- function uploadFile(_x) {
83
- return _uploadFile.apply(this, arguments);
30
+ value: async function uploadFile(file) {
31
+ var _this = this;
32
+ this.file = file;
33
+ var numberOfParts = Math.ceil(file.size / this.chunkSize);
34
+ try {
35
+ /**
36
+ * Initialize the file upload on AWS S3.
37
+ */
38
+ this.upload = await this.api.createUpload({
39
+ data: {
40
+ name: file.name,
41
+ size: file.size,
42
+ type: file.type
43
+ },
44
+ numberOfParts: numberOfParts
45
+ });
46
+
47
+ /**
48
+ * Run the defined number of parallel uploads. Each thread will continue to process parts
49
+ * for as long as there are parts to upload. The promise will resolve once there's no more parts to upload.
50
+ */
51
+ var threads = Math.min(numberOfParts, this.parallelUploads);
52
+ await Promise.all(Array.from({
53
+ length: threads
54
+ }).map(function () {
55
+ return _this.uploadNextPart();
56
+ }));
57
+ await this.complete();
58
+ return this.upload.file;
59
+ } catch (error) {
60
+ await this.complete(error);
61
+ throw error;
84
62
  }
85
- return uploadFile;
86
- }()
63
+ }
87
64
  }, {
88
65
  key: "onProgress",
89
66
  value: function onProgress(_onProgress) {
@@ -98,62 +75,26 @@ var MultiPartUploader = /*#__PURE__*/function () {
98
75
  }
99
76
  }, {
100
77
  key: "complete",
101
- value: function () {
102
- var _complete = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee2(error) {
103
- return (0, _regeneratorRuntime2.default)().wrap(function _callee2$(_context2) {
104
- while (1) switch (_context2.prev = _context2.next) {
105
- case 0:
106
- if (!error) {
107
- _context2.next = 3;
108
- break;
109
- }
110
- this.onErrorFn(error);
111
- return _context2.abrupt("return");
112
- case 3:
113
- _context2.prev = 3;
114
- _context2.next = 6;
115
- return this.sendCompleteRequest();
116
- case 6:
117
- _context2.next = 11;
118
- break;
119
- case 8:
120
- _context2.prev = 8;
121
- _context2.t0 = _context2["catch"](3);
122
- this.onErrorFn(_context2.t0);
123
- case 11:
124
- case "end":
125
- return _context2.stop();
126
- }
127
- }, _callee2, this, [[3, 8]]);
128
- }));
129
- function complete(_x2) {
130
- return _complete.apply(this, arguments);
78
+ value: async function complete(error) {
79
+ if (error) {
80
+ this.onErrorFn(error);
81
+ return;
82
+ }
83
+ try {
84
+ await this.sendCompleteRequest();
85
+ } catch (error) {
86
+ this.onErrorFn(error);
131
87
  }
132
- return complete;
133
- }()
88
+ }
134
89
  }, {
135
90
  key: "sendCompleteRequest",
136
- value: function () {
137
- var _sendCompleteRequest = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee3() {
138
- return (0, _regeneratorRuntime2.default)().wrap(function _callee3$(_context3) {
139
- while (1) switch (_context3.prev = _context3.next) {
140
- case 0:
141
- this.assertIsDefined(this.upload, "Upload must be created before calling \"sendCompleteRequest\"!");
142
- return _context3.abrupt("return", this.api.completeUpload({
143
- fileKey: this.upload.file.key,
144
- uploadId: this.upload.uploadId
145
- }));
146
- case 2:
147
- case "end":
148
- return _context3.stop();
149
- }
150
- }, _callee3, this);
151
- }));
152
- function sendCompleteRequest() {
153
- return _sendCompleteRequest.apply(this, arguments);
154
- }
155
- return sendCompleteRequest;
156
- }()
91
+ value: async function sendCompleteRequest() {
92
+ this.assertIsDefined(this.upload, "Upload must be created before calling \"sendCompleteRequest\"!");
93
+ return this.api.completeUpload({
94
+ fileKey: this.upload.file.key,
95
+ uploadId: this.upload.uploadId
96
+ });
97
+ }
157
98
  }, {
158
99
  key: "progressListener",
159
100
  value: function progressListener(part, event) {
@@ -181,42 +122,21 @@ var MultiPartUploader = /*#__PURE__*/function () {
181
122
  }
182
123
  }, {
183
124
  key: "uploadNextPart",
184
- value: function () {
185
- var _uploadNextPart = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee4() {
186
- var _this2 = this;
187
- var part;
188
- return (0, _regeneratorRuntime2.default)().wrap(function _callee4$(_context4) {
189
- while (1) switch (_context4.prev = _context4.next) {
190
- case 0:
191
- if (this.upload) {
192
- _context4.next = 2;
193
- break;
194
- }
195
- return _context4.abrupt("return");
196
- case 2:
197
- part = this.upload.parts.shift();
198
- if (part) {
199
- _context4.next = 5;
200
- break;
201
- }
202
- return _context4.abrupt("return");
203
- case 5:
204
- return _context4.abrupt("return", executeWithRetry(function () {
205
- return _this2.uploadPart(part);
206
- }).then(function () {
207
- return _this2.uploadNextPart();
208
- }));
209
- case 6:
210
- case "end":
211
- return _context4.stop();
212
- }
213
- }, _callee4, this);
214
- }));
215
- function uploadNextPart() {
216
- return _uploadNextPart.apply(this, arguments);
125
+ value: async function uploadNextPart() {
126
+ var _this2 = this;
127
+ if (!this.upload) {
128
+ return;
217
129
  }
218
- return uploadNextPart;
219
- }()
130
+ var part = this.upload.parts.shift();
131
+ if (!part) {
132
+ return;
133
+ }
134
+ return executeWithRetry(function () {
135
+ return _this2.uploadPart(part);
136
+ }).then(function () {
137
+ return _this2.uploadNextPart();
138
+ });
139
+ }
220
140
  }, {
221
141
  key: "uploadPart",
222
142
  value: function uploadPart(part) {
@@ -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","_asyncToGenerator2","_regeneratorRuntime2","mark","_callee","file","_this","numberOfParts","threads","wrap","_callee$","_context","prev","next","ceil","size","createUpload","data","name","type","upload","sent","Promise","all","Array","from","map","uploadNextPart","complete","abrupt","t0","stop","uploadFile","_x","apply","onProgress","onProgressFn","onError","onErrorFn","_complete","_callee2","_callee2$","_context2","sendCompleteRequest","_x2","_sendCompleteRequest","_callee3","_callee3$","_context3","assertIsDefined","completeUpload","fileKey","uploadId","progressListener","part","event","progressTracker","set","partNumber","loaded","uploaded","values","reduce","sum","uploadedSize","total","percentage","round","err","_uploadNextPart","_callee4","_this2","_callee4$","_context4","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","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,5 +1,11 @@
1
1
  import { UploadedFile, UploadOptions } from "@webiny/app/types";
2
2
  import { FileUploadStrategy } from "./index";
3
+ declare global {
4
+ interface File {
5
+ key?: string;
6
+ keyPrefix?: string;
7
+ }
8
+ }
3
9
  export declare class SimpleUploadStrategy implements FileUploadStrategy {
4
10
  upload(file: File, { apolloClient, onProgress }: UploadOptions): Promise<UploadedFile>;
5
11
  }
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.SimpleUploadStrategy = void 0;
8
- var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
9
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
10
  var _graphql = require("./graphql");
@@ -16,72 +14,57 @@ var SimpleUploadStrategy = /*#__PURE__*/function () {
16
14
  }
17
15
  (0, _createClass2.default)(SimpleUploadStrategy, [{
18
16
  key: "upload",
19
- value: function () {
20
- var _upload = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(file, _ref) {
21
- var apolloClient, onProgress, response, getPreSignedPostPayload;
22
- return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
23
- while (1) switch (_context.prev = _context.next) {
24
- case 0:
25
- apolloClient = _ref.apolloClient, onProgress = _ref.onProgress;
26
- _context.next = 3;
27
- return apolloClient.query({
28
- query: _graphql.GET_PRE_SIGNED_POST_PAYLOAD,
29
- fetchPolicy: "no-cache",
30
- variables: {
31
- data: {
32
- size: file.size,
33
- name: file.name,
34
- type: file.type
35
- }
36
- }
37
- });
38
- case 3:
39
- response = _context.sent;
40
- getPreSignedPostPayload = response.data.fileManager.getPreSignedPostPayload;
41
- if (!getPreSignedPostPayload.error) {
42
- _context.next = 8;
43
- break;
44
- }
45
- console.error(getPreSignedPostPayload);
46
- throw Error(getPreSignedPostPayload.error);
47
- case 8:
48
- return _context.abrupt("return", new Promise(function (resolve, reject) {
49
- var formData = new window.FormData();
50
- Object.keys(getPreSignedPostPayload.data.data.fields).forEach(function (key) {
51
- formData.append(key, getPreSignedPostPayload.data.data.fields[key]);
52
- });
53
- formData.append("file", file);
54
- var xhr = new window.XMLHttpRequest();
55
- xhr.upload.addEventListener("progress", function (event) {
56
- if (onProgress) {
57
- onProgress({
58
- sent: event.loaded,
59
- total: file.size,
60
- percentage: event.loaded / file.size * 100
61
- });
62
- }
63
- }, false);
64
- xhr.open("POST", getPreSignedPostPayload.data.data.url, true);
65
- xhr.send(formData);
66
- xhr.onload = function () {
67
- if (this.status === 204) {
68
- resolve(getPreSignedPostPayload.data.file);
69
- return;
70
- }
71
- reject(this.responseText);
72
- };
73
- }));
74
- case 9:
75
- case "end":
76
- return _context.stop();
17
+ value: async function upload(file, _ref) {
18
+ var apolloClient = _ref.apolloClient,
19
+ onProgress = _ref.onProgress;
20
+ // 1. GET PreSignedPostPayload
21
+ var response = await apolloClient.query({
22
+ query: _graphql.GET_PRE_SIGNED_POST_PAYLOAD,
23
+ fetchPolicy: "no-cache",
24
+ variables: {
25
+ data: {
26
+ size: file.size,
27
+ name: file.name,
28
+ type: file.type,
29
+ key: file.key,
30
+ keyPrefix: file.keyPrefix
77
31
  }
78
- }, _callee);
79
- }));
80
- function upload(_x, _x2) {
81
- return _upload.apply(this, arguments);
32
+ }
33
+ });
34
+ var getPreSignedPostPayload = response.data.fileManager.getPreSignedPostPayload;
35
+ if (getPreSignedPostPayload.error) {
36
+ console.error(getPreSignedPostPayload);
37
+ throw Error(getPreSignedPostPayload.error);
82
38
  }
83
- return upload;
84
- }()
39
+
40
+ // 2. upload file to S3
41
+ return new Promise(function (resolve, reject) {
42
+ var formData = new window.FormData();
43
+ Object.keys(getPreSignedPostPayload.data.data.fields).forEach(function (key) {
44
+ formData.append(key, getPreSignedPostPayload.data.data.fields[key]);
45
+ });
46
+ formData.append("file", file);
47
+ var xhr = new window.XMLHttpRequest();
48
+ xhr.upload.addEventListener("progress", function (event) {
49
+ if (onProgress) {
50
+ onProgress({
51
+ sent: event.loaded,
52
+ total: file.size,
53
+ percentage: event.loaded / file.size * 100
54
+ });
55
+ }
56
+ }, false);
57
+ xhr.open("POST", getPreSignedPostPayload.data.data.url, true);
58
+ xhr.send(formData);
59
+ xhr.onload = function () {
60
+ if (this.status === 204) {
61
+ resolve(getPreSignedPostPayload.data.file);
62
+ return;
63
+ }
64
+ reject(this.responseText);
65
+ };
66
+ });
67
+ }
85
68
  }]);
86
69
  return SimpleUploadStrategy;
87
70
  }();
@@ -1 +1 @@
1
- {"version":3,"names":["_graphql","require","SimpleUploadStrategy","_classCallCheck2","default","_createClass2","key","value","_upload","_asyncToGenerator2","_regeneratorRuntime2","mark","_callee","file","_ref","apolloClient","onProgress","response","getPreSignedPostPayload","wrap","_callee$","_context","prev","next","query","GET_PRE_SIGNED_POST_PAYLOAD","fetchPolicy","variables","data","size","name","type","sent","fileManager","error","console","Error","abrupt","Promise","resolve","reject","formData","window","FormData","Object","keys","fields","forEach","append","xhr","XMLHttpRequest","upload","addEventListener","event","loaded","total","percentage","open","url","send","onload","status","responseText","stop","_x","_x2","apply","arguments","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\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: { size: file.size, name: file.name, type: file.type }\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":"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"}
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"}
package/index.js CHANGED
@@ -20,10 +20,9 @@ var _default = function _default() {
20
20
  (0, _createClass2.default)(S3FileUploader, [{
21
21
  key: "upload",
22
22
  value: function upload(file, options) {
23
- var _window$fmUploadMulti;
24
23
  // Use "simple" strategy for files smaller than ~100MB
25
- // @ts-ignore
26
- var multiPartThreshold = (_window$fmUploadMulti = window["fmUploadMultiPartThreshold"]) !== null && _window$fmUploadMulti !== void 0 ? _window$fmUploadMulti : 100;
24
+ // @ts-expect-error
25
+ var multiPartThreshold = window["fmUploadMultiPartThreshold"] ?? 100;
27
26
  var simple = file.size < multiPartThreshold * 1024 * 1024;
28
27
  var strategy = simple ? new _SimpleUploadStrategy.SimpleUploadStrategy() : new _MultiPartUploadStrategy.MultiPartUploadStrategy();
29
28
  return strategy.upload(file, options);
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","_window$fmUploadMulti","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-ignore\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;QAAA,IAAAC,qBAAA;QACvC;QACA;QACA,IAAMC,kBAAkB,IAAAD,qBAAA,GAAGE,MAAM,CAAC,4BAA4B,CAAC,cAAAF,qBAAA,cAAAA,qBAAA,GAAI,GAAG;QACtE,IAAMG,MAAM,GAAGL,IAAI,CAACM,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,CAACR,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC;MACzC;IAAC;IAAA,OAAAT,cAAA;EAAA;EAGL,OAAO,IAAIA,cAAc,CAAC,CAAC;AAC/B,CAAC;AAAAkB,OAAA,CAAAhB,OAAA,GAAAH,QAAA"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-file-manager-s3",
3
- "version": "5.39.0-beta.1",
3
+ "version": "5.39.0-beta.2",
4
4
  "main": "index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -10,15 +10,15 @@
10
10
  "author": "Webiny Ltd",
11
11
  "license": "MIT",
12
12
  "dependencies": {
13
- "@webiny/app": "5.39.0-beta.1",
13
+ "@webiny/app": "5.39.0-beta.2",
14
14
  "graphql-tag": "2.12.6",
15
15
  "p-retry": "4.6.2"
16
16
  },
17
17
  "devDependencies": {
18
18
  "@babel/cli": "7.22.6",
19
19
  "@babel/core": "7.22.8",
20
- "@webiny/cli": "5.39.0-beta.1",
21
- "@webiny/project-utils": "5.39.0-beta.1",
20
+ "@webiny/cli": "5.39.0-beta.2",
21
+ "@webiny/project-utils": "5.39.0-beta.2",
22
22
  "rimraf": "3.0.2",
23
23
  "typescript": "4.7.4"
24
24
  },
@@ -30,5 +30,5 @@
30
30
  "build": "yarn webiny run build",
31
31
  "watch": "yarn webiny run watch"
32
32
  },
33
- "gitHead": "a22d4ab9fbb4ad35106687cbe17b51a84afd4976"
33
+ "gitHead": "193039382160557448f23f43685f29136f58f87a"
34
34
  }