@webiny/api-page-builder-import-export 0.0.0-unstable.99666aeb00 → 0.0.0-unstable.a9593f74dd

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/client.js +12 -21
  2. package/client.js.map +1 -1
  3. package/export/combine/blocksHandler.js +4 -2
  4. package/export/combine/blocksHandler.js.map +1 -1
  5. package/export/combine/formsHandler.js +4 -2
  6. package/export/combine/formsHandler.js.map +1 -1
  7. package/export/combine/index.js +3 -1
  8. package/export/combine/index.js.map +1 -1
  9. package/export/combine/pagesHandler.js +4 -2
  10. package/export/combine/pagesHandler.js.map +1 -1
  11. package/export/combine/templatesHandler.js +4 -2
  12. package/export/combine/templatesHandler.js.map +1 -1
  13. package/export/process/blocksHandler.js +13 -6
  14. package/export/process/blocksHandler.js.map +1 -1
  15. package/export/process/exporters/BlockExporter.d.ts +12 -0
  16. package/export/process/exporters/BlockExporter.js +57 -0
  17. package/export/process/exporters/BlockExporter.js.map +1 -0
  18. package/export/process/exporters/FormExporter.d.ts +9 -0
  19. package/export/process/exporters/FormExporter.js +36 -0
  20. package/export/process/exporters/FormExporter.js.map +1 -0
  21. package/export/process/exporters/PageExporter.d.ts +11 -0
  22. package/export/process/exporters/PageExporter.js +58 -0
  23. package/export/process/exporters/PageExporter.js.map +1 -0
  24. package/export/process/exporters/PageTemplateExporter.d.ts +11 -0
  25. package/export/process/exporters/PageTemplateExporter.js +56 -0
  26. package/export/process/exporters/PageTemplateExporter.js.map +1 -0
  27. package/export/process/formsHandler.js +8 -6
  28. package/export/process/formsHandler.js.map +1 -1
  29. package/export/process/index.js +3 -1
  30. package/export/process/index.js.map +1 -1
  31. package/export/process/pagesHandler.js +8 -6
  32. package/export/process/pagesHandler.js.map +1 -1
  33. package/export/process/templatesHandler.js +8 -6
  34. package/export/process/templatesHandler.js.map +1 -1
  35. package/export/s3Stream.d.ts +8 -8
  36. package/export/s3Stream.js +27 -22
  37. package/export/s3Stream.js.map +1 -1
  38. package/export/utils.d.ts +8 -13
  39. package/export/utils.js +11 -34
  40. package/export/utils.js.map +1 -1
  41. package/export/zipper.d.ts +5 -5
  42. package/export/zipper.js +18 -22
  43. package/export/zipper.js.map +1 -1
  44. package/graphql/crud/blocks.crud.js +41 -22
  45. package/graphql/crud/blocks.crud.js.map +1 -1
  46. package/graphql/crud/forms.crud.js +41 -12
  47. package/graphql/crud/forms.crud.js.map +1 -1
  48. package/graphql/crud/importExportTasks.crud.js +43 -29
  49. package/graphql/crud/importExportTasks.crud.js.map +1 -1
  50. package/graphql/crud/pages.crud.d.ts +1 -0
  51. package/graphql/crud/pages.crud.js +50 -20
  52. package/graphql/crud/pages.crud.js.map +1 -1
  53. package/graphql/crud/templates.crud.js +40 -11
  54. package/graphql/crud/templates.crud.js.map +1 -1
  55. package/graphql/crud.js +3 -1
  56. package/graphql/crud.js.map +1 -1
  57. package/graphql/graphql/blocks.gql.js +4 -2
  58. package/graphql/graphql/blocks.gql.js.map +1 -1
  59. package/graphql/graphql/forms.gql.js +3 -1
  60. package/graphql/graphql/forms.gql.js.map +1 -1
  61. package/graphql/graphql/importExportTasks.gql.js +3 -1
  62. package/graphql/graphql/importExportTasks.gql.js.map +1 -1
  63. package/graphql/graphql/pages.gql.js +3 -1
  64. package/graphql/graphql/pages.gql.js.map +1 -1
  65. package/graphql/graphql/templates.gql.js +3 -1
  66. package/graphql/graphql/templates.gql.js.map +1 -1
  67. package/graphql/graphql/utils/resolve.js +3 -1
  68. package/graphql/graphql/utils/resolve.js.map +1 -1
  69. package/graphql/graphql.js +3 -1
  70. package/graphql/graphql.js.map +1 -1
  71. package/graphql/index.js +3 -1
  72. package/graphql/index.js.map +1 -1
  73. package/graphql/types.d.ts +113 -1
  74. package/graphql/types.js +3 -1
  75. package/graphql/types.js.map +1 -1
  76. package/import/constants.js +3 -1
  77. package/import/constants.js.map +1 -1
  78. package/import/create/blocksHandler.js +3 -3
  79. package/import/create/blocksHandler.js.map +1 -1
  80. package/import/create/formsHandler.js +3 -1
  81. package/import/create/formsHandler.js.map +1 -1
  82. package/import/create/index.js +3 -1
  83. package/import/create/index.js.map +1 -1
  84. package/import/create/pagesHandler.js +3 -1
  85. package/import/create/pagesHandler.js.map +1 -1
  86. package/import/create/templatesHandler.js +3 -1
  87. package/import/create/templatesHandler.js.map +1 -1
  88. package/import/process/blocks/blocksHandler.js +6 -6
  89. package/import/process/blocks/blocksHandler.js.map +1 -1
  90. package/import/process/blocks/importBlock.d.ts +2 -2
  91. package/import/process/blocks/importBlock.js +33 -27
  92. package/import/process/blocks/importBlock.js.map +1 -1
  93. package/import/process/forms/formsHandler.js +4 -2
  94. package/import/process/forms/formsHandler.js.map +1 -1
  95. package/import/process/forms/importForm.d.ts +1 -1
  96. package/import/process/forms/importForm.js +6 -2
  97. package/import/process/forms/importForm.js.map +1 -1
  98. package/import/process/index.js +3 -1
  99. package/import/process/index.js.map +1 -1
  100. package/import/process/pages/importPage.d.ts +1 -1
  101. package/import/process/pages/importPage.js +8 -6
  102. package/import/process/pages/importPage.js.map +1 -1
  103. package/import/process/pages/pagesHandler.js +3 -1
  104. package/import/process/pages/pagesHandler.js.map +1 -1
  105. package/import/process/templates/importTemplate.d.ts +1 -1
  106. package/import/process/templates/importTemplate.js +6 -2
  107. package/import/process/templates/importTemplate.js.map +1 -1
  108. package/import/process/templates/templatesHandler.js +3 -1
  109. package/import/process/templates/templatesHandler.js.map +1 -1
  110. package/import/utils/deleteS3Folder.js +3 -1
  111. package/import/utils/deleteS3Folder.js.map +1 -1
  112. package/import/utils/extractAndUploadZipFileContents.js +3 -2
  113. package/import/utils/extractAndUploadZipFileContents.js.map +1 -1
  114. package/import/utils/extractZipAndUploadToS3.js +3 -1
  115. package/import/utils/extractZipAndUploadToS3.js.map +1 -1
  116. package/import/utils/getFileNameWithoutExt.js +3 -1
  117. package/import/utils/getFileNameWithoutExt.js.map +1 -1
  118. package/import/utils/index.js +3 -1
  119. package/import/utils/index.js.map +1 -1
  120. package/import/utils/initialStats.js +3 -1
  121. package/import/utils/initialStats.js.map +1 -1
  122. package/import/utils/prepareDataDirMap.js +3 -1
  123. package/import/utils/prepareDataDirMap.js.map +1 -1
  124. package/import/utils/updateFilesInData.js +5 -2
  125. package/import/utils/updateFilesInData.js.map +1 -1
  126. package/import/utils/uploadAssets.js +54 -11
  127. package/import/utils/uploadAssets.js.map +1 -1
  128. package/import/utils/uploadFilesFromS3.d.ts +1 -1
  129. package/import/utils/uploadFilesFromS3.js +4 -2
  130. package/import/utils/uploadFilesFromS3.js.map +1 -1
  131. package/mockSecurity.js +3 -1
  132. package/mockSecurity.js.map +1 -1
  133. package/package.json +27 -32
  134. package/types.js +62 -8
  135. package/types.js.map +1 -1
@@ -1,29 +1,26 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.s3Stream = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
7
  var _stream = require("stream");
11
- var _s = _interopRequireDefault(require("aws-sdk/clients/s3"));
8
+ var _clientS = require("@webiny/aws-sdk/client-s3");
9
+ var _libStorage = require("@webiny/aws-sdk/lib-storage");
12
10
  const ARCHIVE_CONTENT_TYPE = "application/zip";
13
11
  class S3Stream {
14
12
  constructor() {
15
- (0, _defineProperty2.default)(this, "s3", void 0);
16
- (0, _defineProperty2.default)(this, "bucket", void 0);
17
- this.s3 = new _s.default({
13
+ this.s3 = new _clientS.S3({
18
14
  region: process.env.AWS_REGION
19
15
  });
20
16
  this.bucket = process.env.S3_BUCKET;
21
17
  }
22
18
  getPresignedUrl(key) {
23
- return this.s3.getSignedUrl("getObject", {
19
+ return (0, _clientS.getSignedUrl)(this.s3, new _clientS.GetObjectCommand({
24
20
  Bucket: this.bucket,
25
- Key: key,
26
- Expires: 604800 // 1 week
21
+ Key: key
22
+ }), {
23
+ expiresIn: 604800 // 1 week
27
24
  });
28
25
  }
29
26
 
@@ -46,13 +43,14 @@ class S3Stream {
46
43
  return this.s3.headObject({
47
44
  Bucket: this.bucket,
48
45
  Key
49
- }).promise();
46
+ });
50
47
  }
51
- readStream(Key) {
52
- return this.s3.getObject({
48
+ async readStream(Key) {
49
+ const response = await this.s3.send(new _clientS.GetObjectCommand({
53
50
  Bucket: this.bucket,
54
51
  Key
55
- }).createReadStream();
52
+ }));
53
+ return response.Body;
56
54
  }
57
55
  writeStream(Key, contentType = ARCHIVE_CONTENT_TYPE) {
58
56
  const streamPassThrough = new _stream.Stream.PassThrough();
@@ -63,32 +61,39 @@ class S3Stream {
63
61
  ContentType: contentType,
64
62
  Key
65
63
  };
64
+ const upload = new _libStorage.Upload({
65
+ client: this.s3,
66
+ params
67
+ });
66
68
  return {
67
69
  streamPassThrough: streamPassThrough,
68
70
  /**
69
71
  * We're not using the `FileManager` storage plugin here because it currently doesn't support streams.
70
72
  */
71
- streamPassThroughUploadPromise: this.s3.upload(params).promise()
73
+ streamPassThroughUploadPromise: upload.done()
72
74
  };
73
75
  }
74
- upload(params) {
75
- return this.s3.upload((0, _objectSpread2.default)({
76
+ async upload(params) {
77
+ await this.s3.send(new _clientS.PutObjectCommand({
76
78
  ACL: "private",
77
- Bucket: this.bucket
78
- }, params)).promise();
79
+ Bucket: this.bucket,
80
+ ...params
81
+ }));
79
82
  }
80
83
  listObject(prefix) {
81
84
  return this.s3.listObjects({
82
85
  Bucket: this.bucket,
83
86
  Prefix: prefix
84
- }).promise();
87
+ });
85
88
  }
86
89
  deleteObject(key) {
87
90
  return this.s3.deleteObject({
88
91
  Key: key,
89
92
  Bucket: this.bucket
90
- }).promise();
93
+ });
91
94
  }
92
95
  }
93
96
  const s3Stream = new S3Stream();
94
- exports.s3Stream = s3Stream;
97
+ exports.s3Stream = s3Stream;
98
+
99
+ //# sourceMappingURL=s3Stream.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ARCHIVE_CONTENT_TYPE","S3Stream","constructor","s3","S3","region","process","env","AWS_REGION","bucket","S3_BUCKET","getPresignedUrl","key","getSignedUrl","Bucket","Key","Expires","isFileAccessible","getObjectHead","error","console","warn","log","headObject","promise","readStream","getObject","createReadStream","writeStream","contentType","streamPassThrough","Stream","PassThrough","params","ACL","Body","ContentType","streamPassThroughUploadPromise","upload","listObject","prefix","listObjects","Prefix","deleteObject","s3Stream"],"sources":["s3Stream.ts"],"sourcesContent":["import { Stream, Readable } from \"stream\";\nimport S3 from \"aws-sdk/clients/s3\";\n\nconst ARCHIVE_CONTENT_TYPE = \"application/zip\";\n\nclass S3Stream {\n s3: S3;\n bucket: string;\n\n constructor() {\n this.s3 = new S3({\n region: process.env.AWS_REGION as string\n });\n this.bucket = process.env.S3_BUCKET as string;\n }\n\n getPresignedUrl(key: string) {\n return this.s3.getSignedUrl(\"getObject\", {\n Bucket: this.bucket,\n Key: key,\n Expires: 604800 // 1 week\n });\n }\n\n /**\n * We're checking if the file is accessible on S3 by getting object meta data.\n * It help us to filter files that we need to download as part of export data.\n * @param Key {string}\n */\n async isFileAccessible(Key: string): Promise<boolean> {\n try {\n await this.getObjectHead(Key);\n return true;\n } catch (error) {\n console.warn(`Error while fetching meta data for file \"${Key}\"`);\n console.log(error);\n return false;\n }\n }\n\n getObjectHead(Key: string): Promise<S3.HeadObjectOutput> {\n return this.s3.headObject({ Bucket: this.bucket, Key }).promise();\n }\n\n readStream(Key: string): Readable {\n return this.s3.getObject({ Bucket: this.bucket, Key }).createReadStream();\n }\n\n writeStream(Key: string, contentType: string = ARCHIVE_CONTENT_TYPE) {\n const streamPassThrough = new Stream.PassThrough();\n\n const params: S3.PutObjectRequest = {\n ACL: \"private\",\n Body: streamPassThrough,\n Bucket: this.bucket,\n ContentType: contentType,\n Key\n };\n\n return {\n streamPassThrough: streamPassThrough,\n /**\n * We're not using the `FileManager` storage plugin here because it currently doesn't support streams.\n */\n streamPassThroughUploadPromise: this.s3.upload(params).promise()\n };\n }\n\n upload(params: {\n Key: string;\n ContentType: string;\n Body: Buffer;\n }): Promise<S3.ManagedUpload.SendData> {\n return this.s3\n .upload({\n ACL: \"private\",\n Bucket: this.bucket,\n ...params\n })\n .promise();\n }\n\n listObject(prefix: string): Promise<S3.ListObjectsOutput> {\n return this.s3\n .listObjects({\n Bucket: this.bucket,\n Prefix: prefix\n })\n .promise();\n }\n\n deleteObject(key: string): Promise<S3.DeleteObjectOutput> {\n return this.s3.deleteObject({ Key: key, Bucket: this.bucket }).promise();\n }\n}\n\nexport const s3Stream = new S3Stream();\n"],"mappings":";;;;;;;;;AAAA;AACA;AAEA,MAAMA,oBAAoB,GAAG,iBAAiB;AAE9C,MAAMC,QAAQ,CAAC;EAIXC,WAAW,GAAG;IAAA;IAAA;IACV,IAAI,CAACC,EAAE,GAAG,IAAIC,UAAE,CAAC;MACbC,MAAM,EAAEC,OAAO,CAACC,GAAG,CAACC;IACxB,CAAC,CAAC;IACF,IAAI,CAACC,MAAM,GAAGH,OAAO,CAACC,GAAG,CAACG,SAAmB;EACjD;EAEAC,eAAe,CAACC,GAAW,EAAE;IACzB,OAAO,IAAI,CAACT,EAAE,CAACU,YAAY,CAAC,WAAW,EAAE;MACrCC,MAAM,EAAE,IAAI,CAACL,MAAM;MACnBM,GAAG,EAAEH,GAAG;MACRI,OAAO,EAAE,MAAM,CAAC;IACpB,CAAC,CAAC;EACN;;EAEA;AACJ;AACA;AACA;AACA;EACI,MAAMC,gBAAgB,CAACF,GAAW,EAAoB;IAClD,IAAI;MACA,MAAM,IAAI,CAACG,aAAa,CAACH,GAAG,CAAC;MAC7B,OAAO,IAAI;IACf,CAAC,CAAC,OAAOI,KAAK,EAAE;MACZC,OAAO,CAACC,IAAI,CAAE,4CAA2CN,GAAI,GAAE,CAAC;MAChEK,OAAO,CAACE,GAAG,CAACH,KAAK,CAAC;MAClB,OAAO,KAAK;IAChB;EACJ;EAEAD,aAAa,CAACH,GAAW,EAAgC;IACrD,OAAO,IAAI,CAACZ,EAAE,CAACoB,UAAU,CAAC;MAAET,MAAM,EAAE,IAAI,CAACL,MAAM;MAAEM;IAAI,CAAC,CAAC,CAACS,OAAO,EAAE;EACrE;EAEAC,UAAU,CAACV,GAAW,EAAY;IAC9B,OAAO,IAAI,CAACZ,EAAE,CAACuB,SAAS,CAAC;MAAEZ,MAAM,EAAE,IAAI,CAACL,MAAM;MAAEM;IAAI,CAAC,CAAC,CAACY,gBAAgB,EAAE;EAC7E;EAEAC,WAAW,CAACb,GAAW,EAAEc,WAAmB,GAAG7B,oBAAoB,EAAE;IACjE,MAAM8B,iBAAiB,GAAG,IAAIC,cAAM,CAACC,WAAW,EAAE;IAElD,MAAMC,MAA2B,GAAG;MAChCC,GAAG,EAAE,SAAS;MACdC,IAAI,EAAEL,iBAAiB;MACvBhB,MAAM,EAAE,IAAI,CAACL,MAAM;MACnB2B,WAAW,EAAEP,WAAW;MACxBd;IACJ,CAAC;IAED,OAAO;MACHe,iBAAiB,EAAEA,iBAAiB;MACpC;AACZ;AACA;MACYO,8BAA8B,EAAE,IAAI,CAAClC,EAAE,CAACmC,MAAM,CAACL,MAAM,CAAC,CAACT,OAAO;IAClE,CAAC;EACL;EAEAc,MAAM,CAACL,MAIN,EAAsC;IACnC,OAAO,IAAI,CAAC9B,EAAE,CACTmC,MAAM;MACHJ,GAAG,EAAE,SAAS;MACdpB,MAAM,EAAE,IAAI,CAACL;IAAM,GAChBwB,MAAM,EACX,CACDT,OAAO,EAAE;EAClB;EAEAe,UAAU,CAACC,MAAc,EAAiC;IACtD,OAAO,IAAI,CAACrC,EAAE,CACTsC,WAAW,CAAC;MACT3B,MAAM,EAAE,IAAI,CAACL,MAAM;MACnBiC,MAAM,EAAEF;IACZ,CAAC,CAAC,CACDhB,OAAO,EAAE;EAClB;EAEAmB,YAAY,CAAC/B,GAAW,EAAkC;IACtD,OAAO,IAAI,CAACT,EAAE,CAACwC,YAAY,CAAC;MAAE5B,GAAG,EAAEH,GAAG;MAAEE,MAAM,EAAE,IAAI,CAACL;IAAO,CAAC,CAAC,CAACe,OAAO,EAAE;EAC5E;AACJ;AAEO,MAAMoB,QAAQ,GAAG,IAAI3C,QAAQ,EAAE;AAAC"}
1
+ {"version":3,"names":["_stream","require","_clientS","_libStorage","ARCHIVE_CONTENT_TYPE","S3Stream","constructor","s3","S3","region","process","env","AWS_REGION","bucket","S3_BUCKET","getPresignedUrl","key","getSignedUrl","GetObjectCommand","Bucket","Key","expiresIn","isFileAccessible","getObjectHead","error","console","warn","log","headObject","readStream","response","send","Body","writeStream","contentType","streamPassThrough","Stream","PassThrough","params","ACL","ContentType","upload","Upload","client","streamPassThroughUploadPromise","done","PutObjectCommand","listObject","prefix","listObjects","Prefix","deleteObject","s3Stream","exports"],"sources":["s3Stream.ts"],"sourcesContent":["import { Stream, Readable } from \"stream\";\nimport {\n S3,\n ListObjectsOutput,\n DeleteObjectOutput,\n HeadObjectOutput,\n getSignedUrl,\n GetObjectCommand,\n PutObjectCommand,\n PutObjectCommandInput\n} from \"@webiny/aws-sdk/client-s3\";\nimport { Upload } from \"@webiny/aws-sdk/lib-storage\";\n\nconst ARCHIVE_CONTENT_TYPE = \"application/zip\";\n\nclass S3Stream {\n s3: S3;\n bucket: string;\n\n constructor() {\n this.s3 = new S3({\n region: process.env.AWS_REGION as string\n });\n this.bucket = process.env.S3_BUCKET as string;\n }\n\n getPresignedUrl(key?: string) {\n return getSignedUrl(\n this.s3,\n new GetObjectCommand({\n Bucket: this.bucket,\n Key: key\n }),\n {\n expiresIn: 604800 // 1 week\n }\n );\n }\n\n /**\n * We're checking if the file is accessible on S3 by getting object meta data.\n * It help us to filter files that we need to download as part of export data.\n * @param Key {string}\n */\n async isFileAccessible(Key: string): Promise<boolean> {\n try {\n await this.getObjectHead(Key);\n return true;\n } catch (error) {\n console.warn(`Error while fetching meta data for file \"${Key}\"`);\n console.log(error);\n return false;\n }\n }\n\n getObjectHead(Key: string): Promise<HeadObjectOutput> {\n return this.s3.headObject({ Bucket: this.bucket, Key });\n }\n\n async readStream(Key: string): Promise<Readable> {\n const response = await this.s3.send(new GetObjectCommand({ Bucket: this.bucket, Key }));\n return response.Body as Readable;\n }\n\n writeStream(Key: string, contentType: string = ARCHIVE_CONTENT_TYPE) {\n const streamPassThrough = new Stream.PassThrough();\n\n const params: PutObjectCommandInput = {\n ACL: \"private\",\n Body: streamPassThrough,\n Bucket: this.bucket,\n ContentType: contentType,\n Key\n };\n\n const upload = new Upload({\n client: this.s3,\n params\n });\n\n return {\n streamPassThrough: streamPassThrough,\n /**\n * We're not using the `FileManager` storage plugin here because it currently doesn't support streams.\n */\n streamPassThroughUploadPromise: upload.done()\n };\n }\n\n async upload(params: { Key: string; ContentType: string; Body: Buffer }): Promise<void> {\n await this.s3.send(\n new PutObjectCommand({\n ACL: \"private\",\n Bucket: this.bucket,\n ...params\n })\n );\n }\n\n listObject(prefix: string): Promise<ListObjectsOutput> {\n return this.s3.listObjects({\n Bucket: this.bucket,\n Prefix: prefix\n });\n }\n\n deleteObject(key: string): Promise<DeleteObjectOutput> {\n return this.s3.deleteObject({ Key: key, Bucket: this.bucket });\n }\n}\n\nexport const s3Stream = new S3Stream();\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAUA,IAAAE,WAAA,GAAAF,OAAA;AAEA,MAAMG,oBAAoB,GAAG,iBAAiB;AAE9C,MAAMC,QAAQ,CAAC;EAIXC,WAAWA,CAAA,EAAG;IACV,IAAI,CAACC,EAAE,GAAG,IAAIC,WAAE,CAAC;MACbC,MAAM,EAAEC,OAAO,CAACC,GAAG,CAACC;IACxB,CAAC,CAAC;IACF,IAAI,CAACC,MAAM,GAAGH,OAAO,CAACC,GAAG,CAACG,SAAmB;EACjD;EAEAC,eAAeA,CAACC,GAAY,EAAE;IAC1B,OAAO,IAAAC,qBAAY,EACf,IAAI,CAACV,EAAE,EACP,IAAIW,yBAAgB,CAAC;MACjBC,MAAM,EAAE,IAAI,CAACN,MAAM;MACnBO,GAAG,EAAEJ;IACT,CAAC,CAAC,EACF;MACIK,SAAS,EAAE,MAAM,CAAC;IACtB,CACJ,CAAC;EACL;;EAEA;AACJ;AACA;AACA;AACA;EACI,MAAMC,gBAAgBA,CAACF,GAAW,EAAoB;IAClD,IAAI;MACA,MAAM,IAAI,CAACG,aAAa,CAACH,GAAG,CAAC;MAC7B,OAAO,IAAI;IACf,CAAC,CAAC,OAAOI,KAAK,EAAE;MACZC,OAAO,CAACC,IAAI,CAAE,4CAA2CN,GAAI,GAAE,CAAC;MAChEK,OAAO,CAACE,GAAG,CAACH,KAAK,CAAC;MAClB,OAAO,KAAK;IAChB;EACJ;EAEAD,aAAaA,CAACH,GAAW,EAA6B;IAClD,OAAO,IAAI,CAACb,EAAE,CAACqB,UAAU,CAAC;MAAET,MAAM,EAAE,IAAI,CAACN,MAAM;MAAEO;IAAI,CAAC,CAAC;EAC3D;EAEA,MAAMS,UAAUA,CAACT,GAAW,EAAqB;IAC7C,MAAMU,QAAQ,GAAG,MAAM,IAAI,CAACvB,EAAE,CAACwB,IAAI,CAAC,IAAIb,yBAAgB,CAAC;MAAEC,MAAM,EAAE,IAAI,CAACN,MAAM;MAAEO;IAAI,CAAC,CAAC,CAAC;IACvF,OAAOU,QAAQ,CAACE,IAAI;EACxB;EAEAC,WAAWA,CAACb,GAAW,EAAEc,WAAmB,GAAG9B,oBAAoB,EAAE;IACjE,MAAM+B,iBAAiB,GAAG,IAAIC,cAAM,CAACC,WAAW,CAAC,CAAC;IAElD,MAAMC,MAA6B,GAAG;MAClCC,GAAG,EAAE,SAAS;MACdP,IAAI,EAAEG,iBAAiB;MACvBhB,MAAM,EAAE,IAAI,CAACN,MAAM;MACnB2B,WAAW,EAAEN,WAAW;MACxBd;IACJ,CAAC;IAED,MAAMqB,MAAM,GAAG,IAAIC,kBAAM,CAAC;MACtBC,MAAM,EAAE,IAAI,CAACpC,EAAE;MACf+B;IACJ,CAAC,CAAC;IAEF,OAAO;MACHH,iBAAiB,EAAEA,iBAAiB;MACpC;AACZ;AACA;MACYS,8BAA8B,EAAEH,MAAM,CAACI,IAAI,CAAC;IAChD,CAAC;EACL;EAEA,MAAMJ,MAAMA,CAACH,MAA0D,EAAiB;IACpF,MAAM,IAAI,CAAC/B,EAAE,CAACwB,IAAI,CACd,IAAIe,yBAAgB,CAAC;MACjBP,GAAG,EAAE,SAAS;MACdpB,MAAM,EAAE,IAAI,CAACN,MAAM;MACnB,GAAGyB;IACP,CAAC,CACL,CAAC;EACL;EAEAS,UAAUA,CAACC,MAAc,EAA8B;IACnD,OAAO,IAAI,CAACzC,EAAE,CAAC0C,WAAW,CAAC;MACvB9B,MAAM,EAAE,IAAI,CAACN,MAAM;MACnBqC,MAAM,EAAEF;IACZ,CAAC,CAAC;EACN;EAEAG,YAAYA,CAACnC,GAAW,EAA+B;IACnD,OAAO,IAAI,CAACT,EAAE,CAAC4C,YAAY,CAAC;MAAE/B,GAAG,EAAEJ,GAAG;MAAEG,MAAM,EAAE,IAAI,CAACN;IAAO,CAAC,CAAC;EAClE;AACJ;AAEO,MAAMuC,QAAQ,GAAG,IAAI/C,QAAQ,CAAC,CAAC;AAACgD,OAAA,CAAAD,QAAA,GAAAA,QAAA"}
package/export/utils.d.ts CHANGED
@@ -1,6 +1,5 @@
1
- import S3 from "aws-sdk/clients/s3";
2
- import { Page, PageBlock, PageTemplate } from "@webiny/api-page-builder/types";
3
- import { FbForm } from "@webiny/api-form-builder/types";
1
+ import { CompleteMultipartUploadOutput } from "@webiny/aws-sdk/client-s3";
2
+ import { BlockCategory, Page, PageBlock, PageTemplate } from "@webiny/api-page-builder/types";
4
3
  import { FileManagerContext, File } from "@webiny/api-file-manager/types";
5
4
  export declare const EXPORT_PAGES_FOLDER_KEY = "WEBINY_PB_EXPORT_PAGES";
6
5
  export declare const EXPORT_BLOCKS_FOLDER_KEY = "WEBINY_PB_EXPORT_BLOCK";
@@ -10,20 +9,16 @@ export interface ExportedPageData {
10
9
  page: Pick<Page, "content" | "title" | "version" | "status" | "settings" | "path">;
11
10
  files: File[];
12
11
  }
13
- export declare function exportPage(page: Page, exportPagesDataKey: string, fileManager: FileManagerContext["fileManager"]): Promise<S3.ManagedUpload.SendData>;
12
+ export declare function exportPage(page: Page, exportPagesDataKey: string, fileManager: FileManagerContext["fileManager"]): Promise<CompleteMultipartUploadOutput>;
14
13
  export interface ExportedBlockData {
15
- block: Pick<PageBlock, "name" | "content" | "preview">;
14
+ block: Pick<PageBlock, "name" | "content">;
15
+ category: BlockCategory;
16
16
  files: File[];
17
17
  }
18
- export declare function exportBlock(block: PageBlock, exportBlocksDataKey: string, fileManager: FileManagerContext["fileManager"]): Promise<S3.ManagedUpload.SendData>;
18
+ export declare function exportBlock(block: PageBlock, blockCategory: BlockCategory, exportBlocksDataKey: string, fileManager: FileManagerContext["fileManager"]): Promise<CompleteMultipartUploadOutput>;
19
19
  export interface ExportedTemplateData {
20
20
  template: Pick<PageTemplate, "title" | "slug" | "tags" | "description" | "content" | "layout" | "pageCategory">;
21
21
  files: File[];
22
22
  }
23
- export declare function exportTemplate(template: PageTemplate, exportTemplatesDataKey: string, fileManager: FileManagerContext["fileManager"]): Promise<S3.ManagedUpload.SendData>;
24
- export declare function extractFilesFromData(data: Record<string, any>, files?: any[]): File[];
25
- export interface ExportedFormData {
26
- form: Pick<FbForm, "name" | "status" | "version" | "fields" | "layout" | "settings" | "triggers">;
27
- files: File[];
28
- }
29
- export declare function exportForm(form: FbForm, exportFormsDataKey: string): Promise<S3.ManagedUpload.SendData>;
23
+ export declare function exportTemplate(template: PageTemplate, exportTemplatesDataKey: string, fileManager: FileManagerContext["fileManager"]): Promise<CompleteMultipartUploadOutput>;
24
+ export declare function extractFilesFromData(data: Record<string, any>, files?: File[]): File[];
package/export/utils.js CHANGED
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.EXPORT_TEMPLATES_FOLDER_KEY = exports.EXPORT_PAGES_FOLDER_KEY = exports.EXPORT_FORMS_FOLDER_KEY = exports.EXPORT_BLOCKS_FOLDER_KEY = void 0;
8
8
  exports.exportBlock = exportBlock;
9
- exports.exportForm = exportForm;
10
9
  exports.exportPage = exportPage;
11
10
  exports.exportTemplate = exportTemplate;
12
11
  exports.extractFilesFromData = extractFilesFromData;
@@ -60,7 +59,7 @@ async function exportPage(page, exportPagesDataKey, fileManager) {
60
59
  });
61
60
  return zipper.process();
62
61
  }
63
- async function exportBlock(block, exportBlocksDataKey, fileManager) {
62
+ async function exportBlock(block, blockCategory, exportBlocksDataKey, fileManager) {
64
63
  // Extract all files
65
64
  const files = extractFilesFromData(block.content || {});
66
65
  const fileIds = files.map(imageFile => imageFile.id);
@@ -74,17 +73,18 @@ async function exportBlock(block, exportBlocksDataKey, fileManager) {
74
73
  });
75
74
  imageFilesData.push(...filesData);
76
75
  }
77
- // Add block preview image file data
78
- if (block.preview.id) {
79
- imageFilesData.push(await fileManager.getFile(block.preview.id));
80
- }
81
76
 
82
77
  // Extract the block data in a json file and upload it to S3
83
78
  const blockData = {
84
79
  block: {
85
80
  name: block.name,
86
- content: block.content,
87
- preview: block.preview
81
+ content: block.content
82
+ },
83
+ category: {
84
+ name: blockCategory.name,
85
+ slug: blockCategory.slug,
86
+ icon: blockCategory.icon,
87
+ description: blockCategory.description
88
88
  },
89
89
  files: imageFilesData
90
90
  };
@@ -139,10 +139,10 @@ async function exportTemplate(template, exportTemplatesDataKey, fileManager) {
139
139
  return zipper.process();
140
140
  }
141
141
  function extractFilesFromData(data, files = []) {
142
- // Base case: termination
143
142
  if (!data || typeof data !== "object") {
144
143
  return files;
145
144
  }
145
+
146
146
  // Recursively call function for each element
147
147
  if (Array.isArray(data)) {
148
148
  for (let i = 0; i < data.length; i++) {
@@ -156,7 +156,6 @@ function extractFilesFromData(data, files = []) {
156
156
  const tuple = Object.entries(data);
157
157
  for (let i = 0; i < tuple.length; i++) {
158
158
  const [key, value] = tuple[i];
159
- // TODO: @ashutosh extract it to plugins, so that, we can handle cases for other components too.
160
159
  if (key === "file" && value) {
161
160
  files.push(value);
162
161
  } else if (key === "images" && Array.isArray(value)) {
@@ -168,27 +167,5 @@ function extractFilesFromData(data, files = []) {
168
167
  }
169
168
  return files;
170
169
  }
171
- async function exportForm(form, exportFormsDataKey) {
172
- // Extract the form data in a json file and upload it to S3
173
- const formData = {
174
- form: {
175
- name: form.name,
176
- status: form.status,
177
- version: form.version,
178
- fields: form.fields,
179
- layout: form.layout,
180
- settings: form.settings,
181
- triggers: form.triggers
182
- }
183
- };
184
- const formDataBuffer = Buffer.from(JSON.stringify(formData));
185
- const zipper = new _zipper.default({
186
- exportInfo: {
187
- files: [],
188
- name: form.name,
189
- dataBuffer: formDataBuffer
190
- },
191
- archiveFileKey: exportFormsDataKey
192
- });
193
- return zipper.process();
194
- }
170
+
171
+ //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["EXPORT_PAGES_FOLDER_KEY","EXPORT_BLOCKS_FOLDER_KEY","EXPORT_TEMPLATES_FOLDER_KEY","EXPORT_FORMS_FOLDER_KEY","exportPage","page","exportPagesDataKey","fileManager","files","extractFilesFromData","content","pageSettingsImages","get","filter","image","src","fileIds","map","imageFile","id","imageFilesData","length","filesData","listFiles","where","id_in","push","pageData","title","path","version","status","settings","pageDataBuffer","Buffer","from","JSON","stringify","zipper","Zipper","exportInfo","name","dataBuffer","archiveFileKey","process","exportBlock","block","exportBlocksDataKey","preview","getFile","blockData","blockDataBuffer","exportTemplate","template","exportTemplatesDataKey","templateData","slug","tags","description","layout","pageCategory","templateDataBuffer","data","Array","isArray","i","element","tuple","Object","entries","key","value","exportForm","form","exportFormsDataKey","formData","fields","triggers","formDataBuffer"],"sources":["utils.ts"],"sourcesContent":["import S3 from \"aws-sdk/clients/s3\";\nimport { Page, PageBlock, PageTemplate } from \"@webiny/api-page-builder/types\";\nimport { FbForm } from \"@webiny/api-form-builder/types\";\nimport { FileManagerContext, File } from \"@webiny/api-file-manager/types\";\nimport get from \"lodash/get\";\nimport Zipper from \"./zipper\";\n\nexport const EXPORT_PAGES_FOLDER_KEY = \"WEBINY_PB_EXPORT_PAGES\";\nexport const EXPORT_BLOCKS_FOLDER_KEY = \"WEBINY_PB_EXPORT_BLOCK\";\nexport const EXPORT_TEMPLATES_FOLDER_KEY = \"WEBINY_PB_EXPORT_TEMPLATE\";\nexport const EXPORT_FORMS_FOLDER_KEY = \"WEBINY_FB_EXPORT_FORM\";\n\nexport interface ExportedPageData {\n page: Pick<Page, \"content\" | \"title\" | \"version\" | \"status\" | \"settings\" | \"path\">;\n files: File[];\n}\n\nexport async function exportPage(\n page: Page,\n exportPagesDataKey: string,\n fileManager: FileManagerContext[\"fileManager\"]\n): Promise<S3.ManagedUpload.SendData> {\n // Extract all files\n const files = extractFilesFromData(page.content || {});\n // Extract images from page settings\n const pageSettingsImages = [\n get(page, \"settings.general.image\") as unknown as File,\n get(page, \"settings.social.image\") as unknown as File\n ].filter(image => image && image.src);\n\n const fileIds = [...files, ...pageSettingsImages].map(imageFile => imageFile.id);\n // Get file data for all images\n const imageFilesData = [];\n if (fileIds.length > 0) {\n const [filesData] = await fileManager.listFiles({ where: { id_in: fileIds } });\n imageFilesData.push(...filesData);\n }\n\n // Extract the page data in a json file and upload it to S3\n const pageData = {\n page: {\n content: page.content,\n title: page.title,\n path: page.path,\n version: page.version,\n status: page.status,\n settings: page.settings\n },\n files: imageFilesData\n };\n const pageDataBuffer = Buffer.from(JSON.stringify(pageData));\n\n const zipper = new Zipper({\n exportInfo: {\n files: imageFilesData,\n name: page.title,\n dataBuffer: pageDataBuffer\n },\n archiveFileKey: exportPagesDataKey\n });\n\n return zipper.process();\n}\n\nexport interface ExportedBlockData {\n block: Pick<PageBlock, \"name\" | \"content\" | \"preview\">;\n files: File[];\n}\n\nexport async function exportBlock(\n block: PageBlock,\n exportBlocksDataKey: string,\n fileManager: FileManagerContext[\"fileManager\"]\n): Promise<S3.ManagedUpload.SendData> {\n // Extract all files\n const files = extractFilesFromData(block.content || {});\n const fileIds = files.map(imageFile => imageFile.id);\n // Get file data for all images\n const imageFilesData = [];\n if (fileIds.length > 0) {\n const [filesData] = await fileManager.listFiles({ where: { id_in: fileIds } });\n imageFilesData.push(...filesData);\n }\n // Add block preview image file data\n if (block.preview.id) {\n imageFilesData.push(await fileManager.getFile(block.preview.id));\n }\n\n // Extract the block data in a json file and upload it to S3\n const blockData = {\n block: {\n name: block.name,\n content: block.content,\n preview: block.preview\n },\n files: imageFilesData\n };\n const blockDataBuffer = Buffer.from(JSON.stringify(blockData));\n\n const zipper = new Zipper({\n exportInfo: {\n files: imageFilesData,\n name: block.name,\n dataBuffer: blockDataBuffer\n },\n archiveFileKey: exportBlocksDataKey\n });\n\n return zipper.process();\n}\n\nexport interface ExportedTemplateData {\n template: Pick<\n PageTemplate,\n \"title\" | \"slug\" | \"tags\" | \"description\" | \"content\" | \"layout\" | \"pageCategory\"\n >;\n files: File[];\n}\n\nexport async function exportTemplate(\n template: PageTemplate,\n exportTemplatesDataKey: string,\n fileManager: FileManagerContext[\"fileManager\"]\n): Promise<S3.ManagedUpload.SendData> {\n // Extract all files\n const files = extractFilesFromData(template.content || {});\n const fileIds = files.map(imageFile => imageFile.id);\n // Get file data for all images\n const imageFilesData = [];\n if (fileIds.length > 0) {\n const [filesData] = await fileManager.listFiles({ where: { id_in: fileIds } });\n imageFilesData.push(...filesData);\n }\n\n // Extract the template data in a json file and upload it to S3\n const templateData = {\n template: {\n title: template.title,\n slug: template.slug,\n tags: template.tags,\n description: template.description,\n content: template.content,\n layout: template.layout,\n pageCategory: template.pageCategory\n },\n files: imageFilesData\n };\n const templateDataBuffer = Buffer.from(JSON.stringify(templateData));\n\n const zipper = new Zipper({\n exportInfo: {\n files: imageFilesData,\n name: template.title,\n dataBuffer: templateDataBuffer\n },\n archiveFileKey: exportTemplatesDataKey\n });\n\n return zipper.process();\n}\n\nexport function extractFilesFromData(data: Record<string, any>, files: any[] = []): File[] {\n // Base case: termination\n if (!data || typeof data !== \"object\") {\n return files;\n }\n // Recursively call function for each element\n if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n const element = data[i];\n extractFilesFromData(element, files);\n }\n return files;\n }\n\n // Main\n const tuple = Object.entries(data);\n for (let i = 0; i < tuple.length; i++) {\n const [key, value] = tuple[i];\n // TODO: @ashutosh extract it to plugins, so that, we can handle cases for other components too.\n if (key === \"file\" && value) {\n files.push(value);\n } else if (key === \"images\" && Array.isArray(value)) {\n // Handle case for \"images-list\" component\n files.push(...value);\n } else {\n extractFilesFromData(value, files);\n }\n }\n return files;\n}\n\nexport interface ExportedFormData {\n form: Pick<\n FbForm,\n \"name\" | \"status\" | \"version\" | \"fields\" | \"layout\" | \"settings\" | \"triggers\"\n >;\n files: File[];\n}\n\nexport async function exportForm(\n form: FbForm,\n exportFormsDataKey: string\n): Promise<S3.ManagedUpload.SendData> {\n // Extract the form data in a json file and upload it to S3\n const formData = {\n form: {\n name: form.name,\n status: form.status,\n version: form.version,\n fields: form.fields,\n layout: form.layout,\n settings: form.settings,\n triggers: form.triggers\n }\n };\n const formDataBuffer = Buffer.from(JSON.stringify(formData));\n\n const zipper = new Zipper({\n exportInfo: {\n files: [],\n name: form.name,\n dataBuffer: formDataBuffer\n },\n archiveFileKey: exportFormsDataKey\n });\n\n return zipper.process();\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_get","_interopRequireDefault","require","_zipper","EXPORT_PAGES_FOLDER_KEY","exports","EXPORT_BLOCKS_FOLDER_KEY","EXPORT_TEMPLATES_FOLDER_KEY","EXPORT_FORMS_FOLDER_KEY","exportPage","page","exportPagesDataKey","fileManager","files","extractFilesFromData","content","pageSettingsImages","get","filter","image","src","fileIds","map","imageFile","id","imageFilesData","length","filesData","listFiles","where","id_in","push","pageData","title","path","version","status","settings","pageDataBuffer","Buffer","from","JSON","stringify","zipper","Zipper","exportInfo","name","dataBuffer","archiveFileKey","process","exportBlock","block","blockCategory","exportBlocksDataKey","blockData","category","slug","icon","description","blockDataBuffer","exportTemplate","template","exportTemplatesDataKey","templateData","tags","layout","pageCategory","templateDataBuffer","data","Array","isArray","i","element","tuple","Object","entries","key","value"],"sources":["utils.ts"],"sourcesContent":["import { CompleteMultipartUploadOutput } from \"@webiny/aws-sdk/client-s3\";\nimport { BlockCategory, Page, PageBlock, PageTemplate } from \"@webiny/api-page-builder/types\";\nimport { FileManagerContext, File } from \"@webiny/api-file-manager/types\";\nimport get from \"lodash/get\";\nimport Zipper from \"./zipper\";\n\nexport const EXPORT_PAGES_FOLDER_KEY = \"WEBINY_PB_EXPORT_PAGES\";\nexport const EXPORT_BLOCKS_FOLDER_KEY = \"WEBINY_PB_EXPORT_BLOCK\";\nexport const EXPORT_TEMPLATES_FOLDER_KEY = \"WEBINY_PB_EXPORT_TEMPLATE\";\nexport const EXPORT_FORMS_FOLDER_KEY = \"WEBINY_FB_EXPORT_FORM\";\n\nexport interface ExportedPageData {\n page: Pick<Page, \"content\" | \"title\" | \"version\" | \"status\" | \"settings\" | \"path\">;\n files: File[];\n}\n\nexport async function exportPage(\n page: Page,\n exportPagesDataKey: string,\n fileManager: FileManagerContext[\"fileManager\"]\n): Promise<CompleteMultipartUploadOutput> {\n // Extract all files\n const files = extractFilesFromData(page.content || {});\n // Extract images from page settings\n const pageSettingsImages = [\n get(page, \"settings.general.image\") as unknown as File,\n get(page, \"settings.social.image\") as unknown as File\n ].filter(image => image && image.src);\n\n const fileIds = [...files, ...pageSettingsImages].map(imageFile => imageFile.id);\n // Get file data for all images\n const imageFilesData = [];\n if (fileIds.length > 0) {\n const [filesData] = await fileManager.listFiles({ where: { id_in: fileIds } });\n imageFilesData.push(...filesData);\n }\n\n // Extract the page data in a json file and upload it to S3\n const pageData = {\n page: {\n content: page.content,\n title: page.title,\n path: page.path,\n version: page.version,\n status: page.status,\n settings: page.settings\n },\n files: imageFilesData\n };\n const pageDataBuffer = Buffer.from(JSON.stringify(pageData));\n\n const zipper = new Zipper({\n exportInfo: {\n files: imageFilesData,\n name: page.title,\n dataBuffer: pageDataBuffer\n },\n archiveFileKey: exportPagesDataKey\n });\n\n return zipper.process();\n}\n\nexport interface ExportedBlockData {\n block: Pick<PageBlock, \"name\" | \"content\">;\n category: BlockCategory;\n files: File[];\n}\n\nexport async function exportBlock(\n block: PageBlock,\n blockCategory: BlockCategory,\n exportBlocksDataKey: string,\n fileManager: FileManagerContext[\"fileManager\"]\n): Promise<CompleteMultipartUploadOutput> {\n // Extract all files\n const files = extractFilesFromData(block.content || {});\n const fileIds = files.map(imageFile => imageFile.id);\n // Get file data for all images\n const imageFilesData = [];\n if (fileIds.length > 0) {\n const [filesData] = await fileManager.listFiles({ where: { id_in: fileIds } });\n imageFilesData.push(...filesData);\n }\n\n // Extract the block data in a json file and upload it to S3\n const blockData = {\n block: {\n name: block.name,\n content: block.content\n },\n category: {\n name: blockCategory.name,\n slug: blockCategory.slug,\n icon: blockCategory.icon,\n description: blockCategory.description\n },\n files: imageFilesData\n };\n const blockDataBuffer = Buffer.from(JSON.stringify(blockData));\n\n const zipper = new Zipper({\n exportInfo: {\n files: imageFilesData,\n name: block.name,\n dataBuffer: blockDataBuffer\n },\n archiveFileKey: exportBlocksDataKey\n });\n\n return zipper.process();\n}\n\nexport interface ExportedTemplateData {\n template: Pick<\n PageTemplate,\n \"title\" | \"slug\" | \"tags\" | \"description\" | \"content\" | \"layout\" | \"pageCategory\"\n >;\n files: File[];\n}\n\nexport async function exportTemplate(\n template: PageTemplate,\n exportTemplatesDataKey: string,\n fileManager: FileManagerContext[\"fileManager\"]\n): Promise<CompleteMultipartUploadOutput> {\n // Extract all files\n const files = extractFilesFromData(template.content || {});\n const fileIds = files.map(imageFile => imageFile.id);\n // Get file data for all images\n const imageFilesData = [];\n if (fileIds.length > 0) {\n const [filesData] = await fileManager.listFiles({ where: { id_in: fileIds } });\n imageFilesData.push(...filesData);\n }\n\n // Extract the template data in a json file and upload it to S3\n const templateData = {\n template: {\n title: template.title,\n slug: template.slug,\n tags: template.tags,\n description: template.description,\n content: template.content,\n layout: template.layout,\n pageCategory: template.pageCategory\n },\n files: imageFilesData\n };\n const templateDataBuffer = Buffer.from(JSON.stringify(templateData));\n\n const zipper = new Zipper({\n exportInfo: {\n files: imageFilesData,\n name: template.title,\n dataBuffer: templateDataBuffer\n },\n archiveFileKey: exportTemplatesDataKey\n });\n\n return zipper.process();\n}\n\nexport function extractFilesFromData(data: Record<string, any>, files: File[] = []) {\n if (!data || typeof data !== \"object\") {\n return files;\n }\n\n // Recursively call function for each element\n if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n const element = data[i];\n extractFilesFromData(element, files);\n }\n return files;\n }\n\n // Main\n const tuple = Object.entries(data);\n for (let i = 0; i < tuple.length; i++) {\n const [key, value] = tuple[i];\n if (key === \"file\" && value) {\n files.push(value);\n } else if (key === \"images\" && Array.isArray(value)) {\n // Handle case for \"images-list\" component\n files.push(...value);\n } else {\n extractFilesFromData(value, files);\n }\n }\n return files;\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
- import S3 from "aws-sdk/clients/s3";
3
+ import { CompleteMultipartUploadOutput } from "@webiny/aws-sdk/client-s3";
4
4
  import { Readable } from "stream";
5
5
  import { File } from "@webiny/api-file-manager/types";
6
6
  interface FileStreamDetails {
@@ -22,8 +22,8 @@ export default class Zipper {
22
22
  private readonly archiveFileName;
23
23
  config: ZipperConfig;
24
24
  constructor(config: ZipperConfig);
25
- s3DownloadStreams(): FileStreamDetails[];
26
- process(): Promise<S3.ManagedUpload.SendData>;
25
+ s3DownloadStreams(): Promise<FileStreamDetails[]>;
26
+ process(): Promise<CompleteMultipartUploadOutput>;
27
27
  }
28
28
  export declare class ZipOfZip {
29
29
  private readonly archiveFormat;
@@ -31,7 +31,7 @@ export declare class ZipOfZip {
31
31
  keys: string[];
32
32
  filename: string;
33
33
  constructor(keys: string[], filename: string);
34
- getFileStreams(): FileStreamDetails[];
35
- process(): Promise<S3.ManagedUpload.SendData>;
34
+ getFileStreams(): Promise<FileStreamDetails[]>;
35
+ process(): Promise<CompleteMultipartUploadOutput>;
36
36
  }
37
37
  export {};
package/export/zipper.js CHANGED
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.default = exports.ZipOfZip = void 0;
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
9
  var _archiver = _interopRequireDefault(require("archiver"));
11
10
  var _stream = require("stream");
12
11
  var path = _interopRequireWildcard(require("path"));
@@ -16,38 +15,36 @@ var _s3Stream = require("./s3Stream");
16
15
  // TODO: Move "archive" in layer
17
16
 
18
17
  class Zipper {
18
+ archiveFormat = "zip";
19
+ filesDirName = "assets";
19
20
  constructor(config) {
20
- (0, _defineProperty2.default)(this, "archiveFormat", "zip");
21
- (0, _defineProperty2.default)(this, "filesDirName", "assets");
22
- (0, _defineProperty2.default)(this, "archiveFileName", void 0);
23
- (0, _defineProperty2.default)(this, "config", void 0);
24
21
  this.config = config;
25
22
  this.archiveFileName = (0, _uniqid.default)(`${this.config.archiveFileKey}/`, `-${(0, _kebabCase.default)(this.config.exportInfo.name)}.zip`);
26
23
  }
27
- s3DownloadStreams() {
24
+ async s3DownloadStreams() {
28
25
  const exportInfo = this.config.exportInfo;
29
26
  const prefix = (0, _uniqid.default)("", `-${(0, _kebabCase.default)(exportInfo.name)}`);
30
- const files = exportInfo.files.map(({
27
+ const files = await Promise.all(exportInfo.files.map(async ({
31
28
  key
32
29
  }) => {
33
30
  return {
34
- stream: _s3Stream.s3Stream.readStream(key),
31
+ stream: await _s3Stream.s3Stream.readStream(key),
35
32
  filename: `${prefix}\\${this.filesDirName}\\${key}`
36
33
  };
37
- });
34
+ }));
38
35
  return [...files, {
39
36
  stream: _stream.Readable.from(exportInfo.dataBuffer),
40
37
  filename: `${prefix}\\${exportInfo.name}.json`
41
38
  }];
42
39
  }
43
- process() {
40
+ async process() {
44
41
  const {
45
42
  streamPassThrough,
46
43
  streamPassThroughUploadPromise
47
44
  } = _s3Stream.s3Stream.writeStream(this.archiveFileName);
48
45
 
49
46
  // 1. Read all files from S3 using stream.
50
- const s3FilesStreams = this.s3DownloadStreams();
47
+ const s3FilesStreams = await this.s3DownloadStreams();
51
48
 
52
49
  // 2. Prepare zip from the file stream.
53
50
  const archive = _archiver.default.create(this.archiveFormat);
@@ -73,31 +70,28 @@ class Zipper {
73
70
  }
74
71
  exports.default = Zipper;
75
72
  class ZipOfZip {
73
+ archiveFormat = "zip";
76
74
  constructor(keys, filename) {
77
- (0, _defineProperty2.default)(this, "archiveFormat", "zip");
78
- (0, _defineProperty2.default)(this, "archiveFileName", void 0);
79
- (0, _defineProperty2.default)(this, "keys", void 0);
80
- (0, _defineProperty2.default)(this, "filename", void 0);
81
75
  this.keys = keys;
82
76
  this.filename = filename;
83
77
  this.archiveFileName = (0, _uniqid.default)("EXPORTS/", `-${filename}`);
84
78
  }
85
- getFileStreams() {
86
- return this.keys.map(key => {
79
+ async getFileStreams() {
80
+ return await Promise.all(this.keys.map(async key => {
87
81
  return {
88
- stream: _s3Stream.s3Stream.readStream(key),
82
+ stream: await _s3Stream.s3Stream.readStream(key),
89
83
  filename: `${path.basename(key)}`
90
84
  };
91
- });
85
+ }));
92
86
  }
93
- process() {
87
+ async process() {
94
88
  const {
95
89
  streamPassThrough,
96
90
  streamPassThroughUploadPromise
97
91
  } = _s3Stream.s3Stream.writeStream(this.archiveFileName);
98
92
 
99
93
  // 1. Read all files from S3 using stream.
100
- const fileStreamDetails = this.getFileStreams();
94
+ const fileStreamDetails = await this.getFileStreams();
101
95
 
102
96
  // 2. Prepare zip from the file stream.
103
97
  const archive = _archiver.default.create(this.archiveFormat);
@@ -121,4 +115,6 @@ class ZipOfZip {
121
115
  return streamPassThroughUploadPromise;
122
116
  }
123
117
  }
124
- exports.ZipOfZip = ZipOfZip;
118
+ exports.ZipOfZip = ZipOfZip;
119
+
120
+ //# sourceMappingURL=zipper.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Zipper","constructor","config","archiveFileName","uniqueId","archiveFileKey","kebabCase","exportInfo","name","s3DownloadStreams","prefix","files","map","key","stream","s3Stream","readStream","filename","filesDirName","Readable","from","dataBuffer","process","streamPassThrough","streamPassThroughUploadPromise","writeStream","s3FilesStreams","archive","vending","create","archiveFormat","on","error","Error","code","message","path","stack","forEach","streamDetails","append","pipe","finalize","ZipOfZip","keys","getFileStreams","basename","fileStreamDetails"],"sources":["zipper.ts"],"sourcesContent":["// TODO: Move \"archive\" in layer\nimport vending, { ArchiverError } from \"archiver\";\nimport S3 from \"aws-sdk/clients/s3\";\nimport { Readable } from \"stream\";\nimport * as path from \"path\";\nimport kebabCase from \"lodash/kebabCase\";\nimport uniqueId from \"uniqid\";\nimport { s3Stream } from \"./s3Stream\";\nimport { File } from \"@webiny/api-file-manager/types\";\n\ninterface FileStreamDetails {\n stream: Readable;\n filename: string;\n}\n\ninterface ExportInfo {\n files: File[];\n name: string;\n dataBuffer: Buffer;\n}\n\nexport interface ZipperConfig {\n exportInfo: ExportInfo;\n archiveFileKey: string;\n}\n\nexport default class Zipper {\n private readonly archiveFormat = \"zip\";\n private readonly filesDirName = \"assets\";\n private readonly archiveFileName: string;\n config: ZipperConfig;\n\n constructor(config: ZipperConfig) {\n this.config = config;\n this.archiveFileName = uniqueId(\n `${this.config.archiveFileKey}/`,\n `-${kebabCase(this.config.exportInfo.name)}.zip`\n );\n }\n\n s3DownloadStreams(): FileStreamDetails[] {\n const exportInfo = this.config.exportInfo;\n const prefix = uniqueId(\"\", `-${kebabCase(exportInfo.name)}`);\n const files = exportInfo.files.map(({ key }) => {\n return {\n stream: s3Stream.readStream(key),\n filename: `${prefix}\\\\${this.filesDirName}\\\\${key}`\n };\n });\n\n return [\n ...files,\n {\n stream: Readable.from(exportInfo.dataBuffer),\n filename: `${prefix}\\\\${exportInfo.name}.json`\n }\n ];\n }\n\n process(): Promise<S3.ManagedUpload.SendData> {\n const { streamPassThrough, streamPassThroughUploadPromise } = s3Stream.writeStream(\n this.archiveFileName\n );\n\n // 1. Read all files from S3 using stream.\n const s3FilesStreams = this.s3DownloadStreams();\n\n // 2. Prepare zip from the file stream.\n const archive = vending.create(this.archiveFormat);\n // Handle archive events.\n archive.on(\"error\", (error: ArchiverError) => {\n throw new Error(\n `${error.name} ${error.code} ${error.message} ${error.path} ${error.stack}`\n );\n });\n\n // Append all file streams to archive.\n s3FilesStreams.forEach((streamDetails: FileStreamDetails) =>\n archive.append(streamDetails.stream, { name: streamDetails.filename })\n );\n\n // Pipe archive output to streamPassThrough (Transform Stream) which will be uploaded to S3.\n archive.pipe(streamPassThrough);\n // Finalize the archive (ie we are done appending files but streams have to finish yet)\n // 'close', 'end' or 'finish' may be fired right after calling this method so register to them beforehand\n archive.finalize();\n\n // 3. Return upload stream promise.\n return streamPassThroughUploadPromise;\n }\n}\n\nexport class ZipOfZip {\n private readonly archiveFormat = \"zip\";\n private readonly archiveFileName: string;\n keys: string[];\n filename: string;\n\n constructor(keys: string[], filename: string) {\n this.keys = keys;\n this.filename = filename;\n this.archiveFileName = uniqueId(\"EXPORTS/\", `-${filename}`);\n }\n\n getFileStreams(): FileStreamDetails[] {\n return this.keys.map(key => {\n return {\n stream: s3Stream.readStream(key),\n filename: `${path.basename(key)}`\n };\n });\n }\n\n process(): Promise<S3.ManagedUpload.SendData> {\n const { streamPassThrough, streamPassThroughUploadPromise } = s3Stream.writeStream(\n this.archiveFileName\n );\n\n // 1. Read all files from S3 using stream.\n const fileStreamDetails = this.getFileStreams();\n\n // 2. Prepare zip from the file stream.\n const archive = vending.create(this.archiveFormat);\n // Handle archive events.\n archive.on(\"error\", (error: ArchiverError) => {\n throw new Error(\n `${error.name} ${error.code} ${error.message} ${error.path} ${error.stack}`\n );\n });\n\n // Append all file streams to archive.\n fileStreamDetails.forEach((streamDetails: FileStreamDetails) =>\n archive.append(streamDetails.stream, { name: streamDetails.filename })\n );\n\n // Pipe archive output to streamPassThrough (Transform Stream) which will be uploaded to S3.\n archive.pipe(streamPassThrough);\n // Finalize the archive (ie we are done appending files but streams have to finish yet)\n // 'close', 'end' or 'finish' may be fired right after calling this method so register to them beforehand\n archive.finalize();\n\n // 3. Return upload stream promise.\n return streamPassThroughUploadPromise;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_archiver","_interopRequireDefault","require","_stream","path","_interopRequireWildcard","_kebabCase","_uniqid","_s3Stream","Zipper","archiveFormat","filesDirName","constructor","config","archiveFileName","uniqueId","archiveFileKey","kebabCase","exportInfo","name","s3DownloadStreams","prefix","files","Promise","all","map","key","stream","s3Stream","readStream","filename","Readable","from","dataBuffer","process","streamPassThrough","streamPassThroughUploadPromise","writeStream","s3FilesStreams","archive","vending","create","on","error","Error","code","message","stack","forEach","streamDetails","append","pipe","finalize","exports","default","ZipOfZip","keys","getFileStreams","basename","fileStreamDetails"],"sources":["zipper.ts"],"sourcesContent":["// TODO: Move \"archive\" in layer\nimport vending, { ArchiverError } from \"archiver\";\nimport { CompleteMultipartUploadOutput } from \"@webiny/aws-sdk/client-s3\";\nimport { Readable } from \"stream\";\nimport * as path from \"path\";\nimport kebabCase from \"lodash/kebabCase\";\nimport uniqueId from \"uniqid\";\nimport { s3Stream } from \"./s3Stream\";\nimport { File } from \"@webiny/api-file-manager/types\";\n\ninterface FileStreamDetails {\n stream: Readable;\n filename: string;\n}\n\ninterface ExportInfo {\n files: File[];\n name: string;\n dataBuffer: Buffer;\n}\n\nexport interface ZipperConfig {\n exportInfo: ExportInfo;\n archiveFileKey: string;\n}\n\nexport default class Zipper {\n private readonly archiveFormat = \"zip\";\n private readonly filesDirName = \"assets\";\n private readonly archiveFileName: string;\n config: ZipperConfig;\n\n constructor(config: ZipperConfig) {\n this.config = config;\n this.archiveFileName = uniqueId(\n `${this.config.archiveFileKey}/`,\n `-${kebabCase(this.config.exportInfo.name)}.zip`\n );\n }\n\n async s3DownloadStreams(): Promise<FileStreamDetails[]> {\n const exportInfo = this.config.exportInfo;\n const prefix = uniqueId(\"\", `-${kebabCase(exportInfo.name)}`);\n const files = await Promise.all(\n exportInfo.files.map(async ({ key }) => {\n return {\n stream: await s3Stream.readStream(key),\n filename: `${prefix}\\\\${this.filesDirName}\\\\${key}`\n };\n })\n );\n\n return [\n ...files,\n {\n stream: Readable.from(exportInfo.dataBuffer),\n filename: `${prefix}\\\\${exportInfo.name}.json`\n }\n ];\n }\n\n async process(): Promise<CompleteMultipartUploadOutput> {\n const { streamPassThrough, streamPassThroughUploadPromise } = s3Stream.writeStream(\n this.archiveFileName\n );\n\n // 1. Read all files from S3 using stream.\n const s3FilesStreams = await this.s3DownloadStreams();\n\n // 2. Prepare zip from the file stream.\n const archive = vending.create(this.archiveFormat);\n // Handle archive events.\n archive.on(\"error\", (error: ArchiverError) => {\n throw new Error(\n `${error.name} ${error.code} ${error.message} ${error.path} ${error.stack}`\n );\n });\n\n // Append all file streams to archive.\n s3FilesStreams.forEach((streamDetails: FileStreamDetails) =>\n archive.append(streamDetails.stream, { name: streamDetails.filename })\n );\n\n // Pipe archive output to streamPassThrough (Transform Stream) which will be uploaded to S3.\n archive.pipe(streamPassThrough);\n // Finalize the archive (ie we are done appending files but streams have to finish yet)\n // 'close', 'end' or 'finish' may be fired right after calling this method so register to them beforehand\n archive.finalize();\n\n // 3. Return upload stream promise.\n return streamPassThroughUploadPromise;\n }\n}\n\nexport class ZipOfZip {\n private readonly archiveFormat = \"zip\";\n private readonly archiveFileName: string;\n keys: string[];\n filename: string;\n\n constructor(keys: string[], filename: string) {\n this.keys = keys;\n this.filename = filename;\n this.archiveFileName = uniqueId(\"EXPORTS/\", `-${filename}`);\n }\n\n async getFileStreams(): Promise<FileStreamDetails[]> {\n return await Promise.all(\n this.keys.map(async key => {\n return {\n stream: await s3Stream.readStream(key),\n filename: `${path.basename(key)}`\n };\n })\n );\n }\n\n async process(): Promise<CompleteMultipartUploadOutput> {\n const { streamPassThrough, streamPassThroughUploadPromise } = s3Stream.writeStream(\n this.archiveFileName\n );\n\n // 1. Read all files from S3 using stream.\n const fileStreamDetails = await this.getFileStreams();\n\n // 2. Prepare zip from the file stream.\n const archive = vending.create(this.archiveFormat);\n // Handle archive events.\n archive.on(\"error\", (error: ArchiverError) => {\n throw new Error(\n `${error.name} ${error.code} ${error.message} ${error.path} ${error.stack}`\n );\n });\n\n // Append all file streams to archive.\n fileStreamDetails.forEach((streamDetails: FileStreamDetails) =>\n archive.append(streamDetails.stream, { name: streamDetails.filename })\n );\n\n // Pipe archive output to streamPassThrough (Transform Stream) which will be uploaded to S3.\n archive.pipe(streamPassThrough);\n // Finalize the archive (ie we are done appending files but streams have to finish yet)\n // 'close', 'end' or 'finish' may be fired right after calling this method so register to them beforehand\n archive.finalize();\n\n // 3. Return upload stream promise.\n return streamPassThroughUploadPromise;\n }\n}\n"],"mappings":"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"}