@webiny/api-page-builder-import-export 0.0.0-unstable.1e66d121db → 0.0.0-unstable.3386f66516

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 (117) hide show
  1. package/client.d.ts +2 -2
  2. package/client.js.map +1 -1
  3. package/export/combine/blocksHandler.d.ts +6 -0
  4. package/export/combine/blocksHandler.js +106 -0
  5. package/export/combine/blocksHandler.js.map +1 -0
  6. package/{exportPages → export}/combine/index.d.ts +3 -2
  7. package/export/combine/index.js +43 -0
  8. package/export/combine/index.js.map +1 -0
  9. package/export/combine/pagesHandler.d.ts +6 -0
  10. package/export/combine/pagesHandler.js +106 -0
  11. package/export/combine/pagesHandler.js.map +1 -0
  12. package/export/combine/templatesHandler.d.ts +6 -0
  13. package/export/combine/templatesHandler.js +106 -0
  14. package/export/combine/templatesHandler.js.map +1 -0
  15. package/export/process/blocksHandler.d.ts +6 -0
  16. package/export/process/blocksHandler.js +176 -0
  17. package/export/process/blocksHandler.js.map +1 -0
  18. package/{exportPages → export}/process/index.d.ts +4 -6
  19. package/export/process/index.js +40 -0
  20. package/export/process/index.js.map +1 -0
  21. package/export/process/pagesHandler.d.ts +6 -0
  22. package/export/process/pagesHandler.js +204 -0
  23. package/export/process/pagesHandler.js.map +1 -0
  24. package/export/process/templatesHandler.d.ts +6 -0
  25. package/export/process/templatesHandler.js +176 -0
  26. package/export/process/templatesHandler.js.map +1 -0
  27. package/{exportPages → export}/s3Stream.d.ts +0 -0
  28. package/{exportPages → export}/s3Stream.js +0 -0
  29. package/{exportPages → export}/s3Stream.js.map +0 -0
  30. package/export/utils.d.ts +22 -0
  31. package/export/utils.js +173 -0
  32. package/export/utils.js.map +1 -0
  33. package/{exportPages → export}/zipper.d.ts +6 -5
  34. package/{exportPages → export}/zipper.js +8 -7
  35. package/export/zipper.js.map +1 -0
  36. package/graphql/crud/blocks.crud.d.ts +4 -0
  37. package/graphql/crud/blocks.crud.js +155 -0
  38. package/graphql/crud/blocks.crud.js.map +1 -0
  39. package/graphql/crud/importExportTasks.crud.d.ts +5 -0
  40. package/graphql/crud/{pageImportExportTasks.crud.js → importExportTasks.crud.js} +48 -48
  41. package/graphql/crud/importExportTasks.crud.js.map +1 -0
  42. package/graphql/crud/pages.crud.d.ts +2 -2
  43. package/graphql/crud/pages.crud.js +18 -14
  44. package/graphql/crud/pages.crud.js.map +1 -1
  45. package/graphql/crud/templates.crud.d.ts +4 -0
  46. package/graphql/crud/templates.crud.js +140 -0
  47. package/graphql/crud/templates.crud.js.map +1 -0
  48. package/graphql/crud.d.ts +2 -2
  49. package/graphql/crud.js +6 -2
  50. package/graphql/crud.js.map +1 -1
  51. package/graphql/graphql/blocks.gql.d.ts +4 -0
  52. package/graphql/graphql/blocks.gql.js +57 -0
  53. package/graphql/graphql/blocks.gql.js.map +1 -0
  54. package/graphql/graphql/importExportTasks.gql.d.ts +4 -0
  55. package/graphql/graphql/{pageImportExportTasks.gql.js → importExportTasks.gql.js} +17 -17
  56. package/graphql/graphql/importExportTasks.gql.js.map +1 -0
  57. package/graphql/graphql/pages.gql.d.ts +2 -2
  58. package/graphql/graphql/pages.gql.js +3 -9
  59. package/graphql/graphql/pages.gql.js.map +1 -1
  60. package/graphql/graphql/templates.gql.d.ts +4 -0
  61. package/graphql/graphql/templates.gql.js +57 -0
  62. package/graphql/graphql/templates.gql.js.map +1 -0
  63. package/graphql/graphql.js +6 -2
  64. package/graphql/graphql.js.map +1 -1
  65. package/graphql/index.d.ts +2 -2
  66. package/graphql/index.js.map +1 -1
  67. package/graphql/types.d.ts +60 -23
  68. package/graphql/types.js.map +1 -1
  69. package/import/create/blocksHandler.d.ts +3 -0
  70. package/import/create/blocksHandler.js +110 -0
  71. package/import/create/blocksHandler.js.map +1 -0
  72. package/{importPages → import}/create/index.d.ts +7 -5
  73. package/import/create/index.js +43 -0
  74. package/import/create/index.js.map +1 -0
  75. package/import/create/pagesHandler.d.ts +3 -0
  76. package/import/create/pagesHandler.js +112 -0
  77. package/import/create/pagesHandler.js.map +1 -0
  78. package/import/create/templatesHandler.d.ts +3 -0
  79. package/import/create/templatesHandler.js +108 -0
  80. package/import/create/templatesHandler.js.map +1 -0
  81. package/import/process/blocksHandler.d.ts +3 -0
  82. package/import/process/blocksHandler.js +175 -0
  83. package/import/process/blocksHandler.js.map +1 -0
  84. package/{importPages → import}/process/index.d.ts +5 -3
  85. package/import/process/index.js +40 -0
  86. package/import/process/index.js.map +1 -0
  87. package/import/process/pagesHandler.d.ts +3 -0
  88. package/import/process/pagesHandler.js +181 -0
  89. package/import/process/pagesHandler.js.map +1 -0
  90. package/import/process/templatesHandler.d.ts +3 -0
  91. package/import/process/templatesHandler.js +172 -0
  92. package/import/process/templatesHandler.js.map +1 -0
  93. package/import/utils.d.ts +56 -0
  94. package/{importPages → import}/utils.js +162 -36
  95. package/import/utils.js.map +1 -0
  96. package/package.json +22 -22
  97. package/types.d.ts +62 -65
  98. package/types.js +17 -17
  99. package/types.js.map +1 -1
  100. package/exportPages/combine/index.js +0 -114
  101. package/exportPages/combine/index.js.map +0 -1
  102. package/exportPages/process/index.js +0 -208
  103. package/exportPages/process/index.js.map +0 -1
  104. package/exportPages/utils.d.ts +0 -13
  105. package/exportPages/utils.js +0 -113
  106. package/exportPages/utils.js.map +0 -1
  107. package/exportPages/zipper.js.map +0 -1
  108. package/graphql/crud/pageImportExportTasks.crud.d.ts +0 -5
  109. package/graphql/crud/pageImportExportTasks.crud.js.map +0 -1
  110. package/graphql/graphql/pageImportExportTasks.gql.d.ts +0 -4
  111. package/graphql/graphql/pageImportExportTasks.gql.js.map +0 -1
  112. package/importPages/create/index.js +0 -118
  113. package/importPages/create/index.js.map +0 -1
  114. package/importPages/process/index.js +0 -185
  115. package/importPages/process/index.js.map +0 -1
  116. package/importPages/utils.d.ts +0 -50
  117. package/importPages/utils.js.map +0 -1
@@ -5,10 +5,12 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.importBlock = importBlock;
8
9
  exports.importPage = importPage;
10
+ exports.importTemplate = importTemplate;
9
11
  exports.initialStats = initialStats;
10
12
  exports.readExtractAndUploadZipFileContents = readExtractAndUploadZipFileContents;
11
- exports.uploadPageAssets = void 0;
13
+ exports.uploadAssets = void 0;
12
14
 
13
15
  var _uniqid = _interopRequireDefault(require("uniqid"));
14
16
 
@@ -38,12 +40,12 @@ var _downloadInstallFiles = require("@webiny/api-page-builder/graphql/crud/insta
38
40
 
39
41
  var _types = require("../types");
40
42
 
41
- var _s3Stream = require("../exportPages/s3Stream");
43
+ var _s3Stream = require("../export/s3Stream");
42
44
 
43
45
  const streamPipeline = (0, _util.promisify)(_stream.pipeline);
44
46
  const INSTALL_DIR = "/tmp";
45
47
 
46
- const INSTALL_EXTRACT_DIR = _path.default.join(INSTALL_DIR, "apiPageBuilderImportPage");
48
+ const INSTALL_EXTRACT_DIR = _path.default.join(INSTALL_DIR, "apiPageBuilderImport");
47
49
 
48
50
  const FILES_COUNT_IN_EACH_BATCH = 15;
49
51
 
@@ -71,7 +73,19 @@ function updateImageInPageSettings(params) {
71
73
  return newSettings;
72
74
  }
73
75
 
74
- function updateFilesInPageData({
76
+ function updateBlockPreviewImage(params) {
77
+ const {
78
+ file,
79
+ fileIdToKeyMap,
80
+ srcPrefix
81
+ } = params;
82
+ const newFile = file;
83
+ const srcPrefixWithoutTrailingSlash = srcPrefix.endsWith("/") ? srcPrefix.slice(0, -1) : srcPrefix;
84
+ newFile.src = `${srcPrefixWithoutTrailingSlash}/${fileIdToKeyMap.get(file.id || "")}`;
85
+ return newFile;
86
+ }
87
+
88
+ function updateFilesInData({
75
89
  data,
76
90
  fileIdToKeyMap,
77
91
  srcPrefix
@@ -85,7 +99,7 @@ function updateFilesInPageData({
85
99
  if (Array.isArray(data)) {
86
100
  for (let i = 0; i < data.length; i++) {
87
101
  const element = data[i];
88
- updateFilesInPageData({
102
+ updateFilesInData({
89
103
  data: element,
90
104
  fileIdToKeyMap,
91
105
  srcPrefix
@@ -106,7 +120,7 @@ function updateFilesInPageData({
106
120
  value.name = fileIdToKeyMap.get(value.id);
107
121
  value.src = `${srcPrefix}${srcPrefix.endsWith("/") ? "" : "/"}${fileIdToKeyMap.get(value.id)}`;
108
122
  } else {
109
- updateFilesInPageData({
123
+ updateFilesInData({
110
124
  data: value,
111
125
  srcPrefix,
112
126
  fileIdToKeyMap
@@ -115,7 +129,7 @@ function updateFilesInPageData({
115
129
  }
116
130
  }
117
131
 
118
- const uploadPageAssets = async params => {
132
+ const uploadAssets = async params => {
119
133
  const {
120
134
  context,
121
135
  filesData,
@@ -133,9 +147,8 @@ const uploadPageAssets = async params => {
133
147
  return {
134
148
  fileIdToKeyMap
135
149
  };
136
- }
150
+ } // Save files meta data against old key for later use.
137
151
 
138
- console.log("INSIDE uploadPageAssets"); // Save files meta data against old key for later use.
139
152
 
140
153
  const fileKeyToFileMap = new Map(); // Initialize maps.
141
154
 
@@ -190,7 +203,7 @@ const uploadPageAssets = async params => {
190
203
  };
191
204
  };
192
205
 
193
- exports.uploadPageAssets = uploadPageAssets;
206
+ exports.uploadAssets = uploadAssets;
194
207
 
195
208
  async function importPage({
196
209
  pageKey,
@@ -223,7 +236,7 @@ async function importPage({
223
236
  // Upload page assets.
224
237
  const {
225
238
  fileIdToKeyMap
226
- } = await uploadPageAssets({
239
+ } = await uploadAssets({
227
240
  context,
228
241
 
229
242
  /**
@@ -237,7 +250,7 @@ async function importPage({
237
250
  const {
238
251
  srcPrefix = ""
239
252
  } = settings || {};
240
- updateFilesInPageData({
253
+ updateFilesInData({
241
254
  data: page.content || {},
242
255
  fileIdToKeyMap,
243
256
  srcPrefix
@@ -256,6 +269,119 @@ async function importPage({
256
269
  return page;
257
270
  }
258
271
 
272
+ async function importBlock({
273
+ blockKey,
274
+ context,
275
+ fileUploadsData
276
+ }) {
277
+ const log = console.log; // Making Directory for block in which we're going to extract the block data file.
278
+
279
+ const BLOCK_EXTRACT_DIR = _path.default.join(INSTALL_EXTRACT_DIR, blockKey);
280
+
281
+ (0, _fsExtra.ensureDirSync)(BLOCK_EXTRACT_DIR);
282
+
283
+ const blockDataFileKey = _dotPropImmutable.default.get(fileUploadsData, `data`);
284
+
285
+ const BLOCK_DATA_FILE_PATH = _path.default.join(BLOCK_EXTRACT_DIR, _path.default.basename(blockDataFileKey));
286
+
287
+ log(`Downloading Block data file: ${blockDataFileKey} at "${BLOCK_DATA_FILE_PATH}"`); // Download and save block data file in disk.
288
+
289
+ await new Promise((resolve, reject) => {
290
+ _s3Stream.s3Stream.readStream(blockDataFileKey).on("error", reject).pipe((0, _fs.createWriteStream)(BLOCK_DATA_FILE_PATH)).on("error", reject).on("finish", resolve);
291
+ }); // Load the block data file from disk.
292
+
293
+ log(`Load file ${blockDataFileKey}`);
294
+ const {
295
+ block,
296
+ files
297
+ } = await (0, _loadJsonFile.default)(BLOCK_DATA_FILE_PATH); // Only update block data if there are files.
298
+
299
+ if (files && Array.isArray(files) && files.length > 0) {
300
+ // Upload block assets.
301
+ const {
302
+ fileIdToKeyMap
303
+ } = await uploadAssets({
304
+ context,
305
+ filesData: files,
306
+ fileUploadsData
307
+ });
308
+ const settings = await context.fileManager.settings.getSettings();
309
+ const {
310
+ srcPrefix = ""
311
+ } = settings || {};
312
+ updateFilesInData({
313
+ data: block.content || {},
314
+ fileIdToKeyMap,
315
+ srcPrefix
316
+ });
317
+ block.preview = updateBlockPreviewImage({
318
+ file: block.preview || {},
319
+ fileIdToKeyMap,
320
+ srcPrefix
321
+ });
322
+ }
323
+
324
+ log("Removing Directory for block...");
325
+ await (0, _downloadInstallFiles.deleteFile)(blockKey);
326
+ log(`Remove block contents from S3...`);
327
+ await deleteS3Folder(_path.default.dirname(fileUploadsData.data));
328
+ return block;
329
+ }
330
+
331
+ async function importTemplate({
332
+ templateKey,
333
+ context,
334
+ fileUploadsData
335
+ }) {
336
+ const log = console.log; // Making Directory for template in which we're going to extract the template data file.
337
+
338
+ const TEMPLATE_EXTRACT_DIR = _path.default.join(INSTALL_EXTRACT_DIR, templateKey);
339
+
340
+ (0, _fsExtra.ensureDirSync)(TEMPLATE_EXTRACT_DIR);
341
+
342
+ const templateDataFileKey = _dotPropImmutable.default.get(fileUploadsData, `data`);
343
+
344
+ const TEMPLATE_DATA_FILE_PATH = _path.default.join(TEMPLATE_EXTRACT_DIR, _path.default.basename(templateDataFileKey));
345
+
346
+ log(`Downloading Template data file: ${templateDataFileKey} at "${TEMPLATE_DATA_FILE_PATH}"`); // Download and save template data file in disk.
347
+
348
+ await new Promise((resolve, reject) => {
349
+ _s3Stream.s3Stream.readStream(templateDataFileKey).on("error", reject).pipe((0, _fs.createWriteStream)(TEMPLATE_DATA_FILE_PATH)).on("error", reject).on("finish", resolve);
350
+ }); // Load the template data file from disk.
351
+
352
+ log(`Load file ${templateDataFileKey}`);
353
+ const {
354
+ template,
355
+ files
356
+ } = await (0, _loadJsonFile.default)(TEMPLATE_DATA_FILE_PATH); // Only update template data if there are files.
357
+
358
+ if (files && Array.isArray(files) && files.length > 0) {
359
+ // Upload template assets.
360
+ const {
361
+ fileIdToKeyMap
362
+ } = await uploadAssets({
363
+ context,
364
+ filesData: files,
365
+ fileUploadsData
366
+ });
367
+ const settings = await context.fileManager.settings.getSettings();
368
+ const {
369
+ srcPrefix = ""
370
+ } = settings || {};
371
+ updateFilesInData({
372
+ data: template.content || {},
373
+ fileIdToKeyMap,
374
+ srcPrefix
375
+ });
376
+ }
377
+
378
+ log("Removing Directory for template...");
379
+ await (0, _downloadInstallFiles.deleteFile)(templateKey);
380
+ log(`Remove template contents from S3...`);
381
+ await deleteS3Folder(_path.default.dirname(fileUploadsData.data));
382
+ return template;
383
+ }
384
+
259
385
  async function uploadFilesFromS3({
260
386
  fileKeyToFileMap,
261
387
  oldKeyToNewKeyMap
@@ -310,11 +436,11 @@ function getFileNameWithoutExt(fileName) {
310
436
  /**
311
437
  * Function will read the given zip file from S3 via stream, extract its content and upload it to S3 bucket.
312
438
  * @param zipFileUrl
313
- * @return PageImportData S3 file keys for all uploaded assets group by page.
439
+ * @return ImportData S3 file keys for all uploaded assets group by page/block.
314
440
  */
315
441
  async function readExtractAndUploadZipFileContents(zipFileUrl) {
316
442
  const log = console.log;
317
- const pageImportDataList = [];
443
+ const importDataList = [];
318
444
 
319
445
  const zipFileName = _path.default.basename(zipFileUrl).split("?")[0];
320
446
 
@@ -325,7 +451,7 @@ async function readExtractAndUploadZipFileContents(zipFileUrl) {
325
451
  }
326
452
 
327
453
  const readStream = response.body;
328
- const uniquePath = (0, _uniqid.default)("IMPORT_PAGES/"); // Read export file and download it in the disk
454
+ const uniquePath = (0, _uniqid.default)("IMPORTS/"); // Read export file and download it in the disk
329
455
 
330
456
  const ZIP_FILE_PATH = _path.default.join(INSTALL_DIR, zipFileName);
331
457
 
@@ -335,22 +461,22 @@ async function readExtractAndUploadZipFileContents(zipFileUrl) {
335
461
 
336
462
  const zipFilePaths = await extractZipToDisk(ZIP_FILE_PATH);
337
463
  log(`Removing ZIP file "${zipFileUrl}" from ${ZIP_FILE_PATH}`);
338
- await (0, _downloadInstallFiles.deleteFile)(ZIP_FILE_PATH); // Extract each page zip and upload their content's to S3
464
+ await (0, _downloadInstallFiles.deleteFile)(ZIP_FILE_PATH); // Extract each page/block zip and upload their content's to S3
339
465
 
340
466
  for (let i = 0; i < zipFilePaths.length; i++) {
341
467
  const currentPath = zipFilePaths[i];
342
468
  const dataMap = await extractZipAndUploadToS3(currentPath, uniquePath);
343
- pageImportDataList.push(dataMap);
469
+ importDataList.push(dataMap);
344
470
  }
345
471
 
346
472
  log("Removing all ZIP files located at ", _path.default.dirname(zipFilePaths[0]));
347
473
  await (0, _downloadInstallFiles.deleteFile)(_path.default.dirname(zipFilePaths[0]));
348
- return pageImportDataList;
474
+ return importDataList;
349
475
  }
350
476
 
351
477
  const ASSETS_DIR_NAME = "/assets";
352
478
 
353
- function preparePageDataDirMap({
479
+ function prepareDataDirMap({
354
480
  map,
355
481
  filePath,
356
482
  newKey
@@ -394,17 +520,17 @@ async function deleteS3Folder(key) {
394
520
 
395
521
  function initialStats(total) {
396
522
  return {
397
- [_types.PageImportExportTaskStatus.PENDING]: total,
398
- [_types.PageImportExportTaskStatus.PROCESSING]: 0,
399
- [_types.PageImportExportTaskStatus.COMPLETED]: 0,
400
- [_types.PageImportExportTaskStatus.FAILED]: 0,
523
+ [_types.ImportExportTaskStatus.PENDING]: total,
524
+ [_types.ImportExportTaskStatus.PROCESSING]: 0,
525
+ [_types.ImportExportTaskStatus.COMPLETED]: 0,
526
+ [_types.ImportExportTaskStatus.FAILED]: 0,
401
527
  total
402
528
  };
403
529
  }
404
530
 
405
531
  function extractZipToDisk(exportFileZipPath) {
406
532
  return new Promise((resolve, reject) => {
407
- const pageZipFilePaths = [];
533
+ const zipFilePaths = [];
408
534
  const uniqueFolderNameForExport = getFileNameWithoutExt(exportFileZipPath);
409
535
 
410
536
  const EXPORT_FILE_EXTRACTION_PATH = _path.default.join(INSTALL_DIR, uniqueFolderNameForExport); // Make sure DIR exists
@@ -434,7 +560,7 @@ function extractZipToDisk(exportFileZipPath) {
434
560
  reject(err);
435
561
  }
436
562
 
437
- resolve(pageZipFilePaths);
563
+ resolve(zipFilePaths);
438
564
  });
439
565
  zipFile.readEntry();
440
566
  zipFile.on("entry", function (entry) {
@@ -463,7 +589,7 @@ function extractZipToDisk(exportFileZipPath) {
463
589
  const filePath = _path.default.join(EXPORT_FILE_EXTRACTION_PATH, entry.fileName);
464
590
 
465
591
  readStream.on("end", function () {
466
- pageZipFilePaths.push(filePath);
592
+ zipFilePaths.push(filePath);
467
593
  zipFile.readEntry();
468
594
  });
469
595
  streamPipeline(readStream, (0, _fs.createWriteStream)(filePath)).catch(error => {
@@ -476,28 +602,28 @@ function extractZipToDisk(exportFileZipPath) {
476
602
  });
477
603
  }
478
604
 
479
- function extractZipAndUploadToS3(pageDataZipFilePath, uniquePath) {
605
+ function extractZipAndUploadToS3(dataZipFilePath, uniquePath) {
480
606
  return new Promise((resolve, reject) => {
481
607
  const filePaths = [];
482
608
  const fileUploadPromises = [];
483
- const uniquePageKey = getFileNameWithoutExt(pageDataZipFilePath);
609
+ const uniqueKey = getFileNameWithoutExt(dataZipFilePath);
484
610
  let dataMap = {
485
- key: uniquePageKey,
611
+ key: uniqueKey,
486
612
  assets: {},
487
613
  data: ""
488
614
  };
489
615
 
490
- _yauzl.default.open(pageDataZipFilePath, {
616
+ _yauzl.default.open(dataZipFilePath, {
491
617
  lazyEntries: true
492
618
  }, function (err, zipFile) {
493
619
  if (err) {
494
- console.warn("ERROR: Failed to extract zip: ", pageDataZipFilePath, err);
620
+ console.warn("ERROR: Failed to extract zip: ", dataZipFilePath, err);
495
621
  reject(err);
496
622
  return;
497
623
  }
498
624
 
499
625
  if (!zipFile) {
500
- console.log("ERROR: Probably failed to extract zip: " + pageDataZipFilePath);
626
+ console.log("ERROR: Probably failed to extract zip: " + dataZipFilePath);
501
627
  reject("Missing Zip File Resource.");
502
628
  return;
503
629
  }
@@ -505,7 +631,7 @@ function extractZipAndUploadToS3(pageDataZipFilePath, uniquePath) {
505
631
  console.info(`The ZIP file contains ${zipFile.entryCount} entries.`);
506
632
  zipFile.on("end", function (err) {
507
633
  if (err) {
508
- console.warn('ERROR: Failed on "END" for file: ', pageDataZipFilePath, err);
634
+ console.warn('ERROR: Failed on "END" for file: ', dataZipFilePath, err);
509
635
  reject(err);
510
636
  }
511
637
 
@@ -535,7 +661,7 @@ function extractZipAndUploadToS3(pageDataZipFilePath, uniquePath) {
535
661
  }
536
662
 
537
663
  if (!readStream) {
538
- console.log("ERROR: Missing Read Stream while importing pages.");
664
+ console.log("ERROR: Missing Read Stream while importing.");
539
665
  reject("Missing Read Strea Resource.");
540
666
  return;
541
667
  }
@@ -544,9 +670,9 @@ function extractZipAndUploadToS3(pageDataZipFilePath, uniquePath) {
544
670
  filePaths.push(entry.fileName);
545
671
  zipFile.readEntry();
546
672
  });
547
- const newKey = `${uniquePath}/${uniquePageKey}/${entry.fileName}`; // Modify in place
673
+ const newKey = `${uniquePath}/${uniqueKey}/${entry.fileName}`; // Modify in place
548
674
 
549
- dataMap = preparePageDataDirMap({
675
+ dataMap = prepareDataDirMap({
550
676
  map: dataMap,
551
677
  filePath: entry.fileName,
552
678
  newKey
@@ -0,0 +1 @@
1
+ {"version":3,"names":["streamPipeline","promisify","pipeline","INSTALL_DIR","INSTALL_EXTRACT_DIR","path","join","FILES_COUNT_IN_EACH_BATCH","updateImageInPageSettings","params","settings","fileIdToKeyMap","srcPrefix","newSettings","srcPrefixWithoutTrailingSlash","endsWith","slice","dotProp","get","set","general","image","id","social","updateBlockPreviewImage","file","newFile","src","updateFilesInData","data","Array","isArray","i","length","element","tuple","Object","entries","key","value","has","name","uploadAssets","context","filesData","fileUploadsData","Map","process","env","NODE_ENV","fileKeyToFileMap","type","fileUploadResults","uploadFilesFromS3","oldKeyToNewKeyMap","assets","createFilesInput","map","uploadResult","newKey","Key","getOldFileKey","size","meta","tags","filter","Boolean","createFilesPromises","createFilesInputChunks","chunk","createFilesInputChunk","push","fileManager","files","createFilesInBatch","Promise","all","importPage","pageKey","log","console","PAGE_EXTRACT_DIR","ensureDirSync","pageDataFileKey","PAGE_DATA_FILE_PATH","basename","resolve","reject","s3Stream","readStream","on","pipe","createWriteStream","page","loadJson","getSettings","content","deleteFile","deleteS3Folder","dirname","importBlock","blockKey","BLOCK_EXTRACT_DIR","blockDataFileKey","BLOCK_DATA_FILE_PATH","block","preview","importTemplate","templateKey","TEMPLATE_EXTRACT_DIR","templateDataFileKey","TEMPLATE_DATA_FILE_PATH","template","oldKeysForAssets","keys","promises","oldKey","tempNewKey","fileMetaData","uniqueId","streamPassThrough","streamPassThroughUploadPromise","promise","writeStream","rest","split","e","FILE_CONTENT_TYPE","getFileNameWithoutExt","fileName","replace","extname","readExtractAndUploadZipFileContents","zipFileUrl","importDataList","zipFileName","response","fetch","ok","WebinyError","statusText","body","uniquePath","ZIP_FILE_PATH","zipFilePaths","extractZipToDisk","currentPath","dataMap","extractZipAndUploadToS3","ASSETS_DIR_NAME","prepareDataDirMap","filePath","isAsset","listObject","Contents","c","deleteFilePromises","deleteObject","initialStats","total","ImportExportTaskStatus","PENDING","PROCESSING","COMPLETED","FAILED","exportFileZipPath","uniqueFolderNameForExport","EXPORT_FILE_EXTRACTION_PATH","yauzl","open","lazyEntries","err","zipFile","warn","info","entryCount","readEntry","entry","test","openReadStream","catch","error","dataZipFilePath","filePaths","fileUploadPromises","uniqueKey","then","res","forEach","r"],"sources":["utils.ts"],"sourcesContent":["import uniqueId from \"uniqid\";\nimport S3 from \"aws-sdk/clients/s3\";\nimport dotProp from \"dot-prop-immutable\";\nimport { createWriteStream } from \"fs\";\nimport { ensureDirSync } from \"fs-extra\";\nimport { promisify } from \"util\";\nimport { pipeline } from \"stream\";\nimport fetch from \"node-fetch\";\nimport path from \"path\";\nimport yauzl from \"yauzl\";\nimport chunk from \"lodash/chunk\";\nimport loadJson from \"load-json-file\";\nimport { FileInput, File } from \"@webiny/api-file-manager/types\";\nimport WebinyError from \"@webiny/error\";\nimport { deleteFile } from \"@webiny/api-page-builder/graphql/crud/install/utils/downloadInstallFiles\";\nimport { File as ImageFile, ImportExportTaskStatus } from \"~/types\";\nimport { PbImportExportContext } from \"~/graphql/types\";\nimport { s3Stream } from \"~/export/s3Stream\";\nimport { ExportedPageData, ExportedBlockData, ExportedTemplateData } from \"~/export/utils\";\nimport { PageSettings } from \"@webiny/api-page-builder/types\";\n\ninterface FileItem extends File {\n key: string;\n type: string;\n name: string;\n size: number;\n meta: Record<string, any>;\n tags: string[];\n}\n\nconst streamPipeline = promisify(pipeline);\n\nconst INSTALL_DIR = \"/tmp\";\nconst INSTALL_EXTRACT_DIR = path.join(INSTALL_DIR, \"apiPageBuilderImport\");\nconst FILES_COUNT_IN_EACH_BATCH = 15;\n\ninterface UpdateFilesInDataParams {\n data: Record<string, any>;\n fileIdToKeyMap: Map<string, string>;\n srcPrefix: string;\n}\n\ninterface UpdateImageInPageSettingsParams {\n fileIdToKeyMap: Map<string, string>;\n srcPrefix: string;\n settings: PageSettings;\n}\n\nfunction updateImageInPageSettings(\n params: UpdateImageInPageSettingsParams\n): UpdateImageInPageSettingsParams[\"settings\"] {\n const { settings, fileIdToKeyMap, srcPrefix } = params;\n let newSettings = settings;\n\n const srcPrefixWithoutTrailingSlash = srcPrefix.endsWith(\"/\")\n ? srcPrefix.slice(0, -1)\n : srcPrefix;\n\n if (dotProp.get(newSettings, \"general.image.src\")) {\n newSettings = dotProp.set(\n newSettings,\n \"general.image.src\",\n `${srcPrefixWithoutTrailingSlash}/${fileIdToKeyMap.get(\n settings.general?.image?.id || \"\"\n )}`\n );\n }\n if (dotProp.get(newSettings, \"social.image.src\")) {\n newSettings = dotProp.set(\n newSettings,\n \"social.image.src\",\n `${srcPrefixWithoutTrailingSlash}/${fileIdToKeyMap.get(\n settings.social?.image?.id || \"\"\n )}`\n );\n }\n\n return newSettings;\n}\n\ninterface UpdateBlockPreviewImage {\n fileIdToKeyMap: Map<string, string>;\n srcPrefix: string;\n file: ImageFile;\n}\n\nfunction updateBlockPreviewImage(params: UpdateBlockPreviewImage): ImageFile {\n const { file, fileIdToKeyMap, srcPrefix } = params;\n const newFile = file;\n\n const srcPrefixWithoutTrailingSlash = srcPrefix.endsWith(\"/\")\n ? srcPrefix.slice(0, -1)\n : srcPrefix;\n\n newFile.src = `${srcPrefixWithoutTrailingSlash}/${fileIdToKeyMap.get(file.id || \"\")}`;\n\n return newFile;\n}\n\nfunction updateFilesInData({ data, fileIdToKeyMap, srcPrefix }: UpdateFilesInDataParams) {\n // BASE CASE: Termination point\n if (!data || typeof data !== \"object\") {\n return;\n }\n // Recursively call function if data is array\n if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n const element = data[i];\n updateFilesInData({ data: element, fileIdToKeyMap, srcPrefix });\n }\n return;\n }\n // Main logic\n const tuple = Object.entries(data);\n for (let i = 0; i < tuple.length; i++) {\n const [key, value] = tuple[i];\n\n if (key === \"file\" && value && fileIdToKeyMap.has(value.id)) {\n value.key = fileIdToKeyMap.get(value.id);\n value.name = fileIdToKeyMap.get(value.id);\n value.src = `${srcPrefix}${srcPrefix.endsWith(\"/\") ? \"\" : \"/\"}${fileIdToKeyMap.get(\n value.id\n )}`;\n } else {\n updateFilesInData({ data: value, srcPrefix, fileIdToKeyMap });\n }\n }\n}\n\ninterface UploadAssetsParams {\n context: PbImportExportContext;\n filesData: File[];\n fileUploadsData: FileUploadsData;\n}\n\ninterface UploadAssetsReturnType {\n fileIdToKeyMap: Map<string, string>;\n}\n\nexport const uploadAssets = async (params: UploadAssetsParams): Promise<UploadAssetsReturnType> => {\n const { context, filesData, fileUploadsData } = params;\n // Save uploaded file key against static id for later use.\n const fileIdToKeyMap = new Map<string, string>();\n /**\n * This function contains logic of file download from S3.\n * Current we're not mocking zip file download from S3 in tests at the moment.\n * So, we're manually mocking it in case of test just by returning an empty object.\n */\n if (process.env.NODE_ENV === \"test\") {\n return {\n fileIdToKeyMap\n };\n }\n\n // Save files meta data against old key for later use.\n const fileKeyToFileMap = new Map<string, FileItem>();\n // Initialize maps.\n for (let i = 0; i < filesData.length; i++) {\n const file = filesData[i];\n fileKeyToFileMap.set(file.key, file);\n\n // Initialize the value\n fileIdToKeyMap.set(file.id, file.type);\n }\n\n const fileUploadResults = await uploadFilesFromS3({\n fileKeyToFileMap,\n oldKeyToNewKeyMap: fileUploadsData.assets\n });\n\n // Create files in File Manager\n const createFilesInput = fileUploadResults\n .map((uploadResult): FileInput | null => {\n const newKey = uploadResult.Key;\n const file = fileKeyToFileMap.get(getOldFileKey(newKey));\n if (!file) {\n return null;\n }\n\n // Update the file map with newly uploaded file.\n fileIdToKeyMap.set(file.id, newKey);\n\n return {\n key: newKey,\n name: file.name,\n size: file.size,\n type: file.type,\n meta: file.meta,\n tags: file.tags\n };\n })\n .filter(Boolean) as FileInput[];\n\n const createFilesPromises = [];\n // Gives an array of chunks (each consists of FILES_COUNT_IN_EACH_BATCH items).\n const createFilesInputChunks = chunk(createFilesInput, FILES_COUNT_IN_EACH_BATCH);\n for (let i = 0; i < createFilesInputChunks.length; i++) {\n const createFilesInputChunk = createFilesInputChunks[i];\n createFilesPromises.push(\n /*\n * We need to break down files into chunks because\n * `createFilesInBatch` operation has a limit on number of files it can handle at once.\n */\n context.fileManager.files.createFilesInBatch(createFilesInputChunk)\n );\n }\n\n await Promise.all(createFilesPromises);\n\n return {\n fileIdToKeyMap\n };\n};\n\ninterface FileUploadsData {\n data: string;\n assets: Record<string, string>;\n}\n\ninterface ImportPageParams {\n key: string;\n pageKey: string;\n context: PbImportExportContext;\n fileUploadsData: FileUploadsData;\n}\n\nexport async function importPage({\n pageKey,\n context,\n fileUploadsData\n}: ImportPageParams): Promise<ExportedPageData[\"page\"]> {\n const log = console.log;\n\n // Making Directory for page in which we're going to extract the page data file.\n const PAGE_EXTRACT_DIR = path.join(INSTALL_EXTRACT_DIR, pageKey);\n ensureDirSync(PAGE_EXTRACT_DIR);\n\n const pageDataFileKey = dotProp.get(fileUploadsData, `data`);\n const PAGE_DATA_FILE_PATH = path.join(PAGE_EXTRACT_DIR, path.basename(pageDataFileKey));\n\n log(`Downloading Page data file: ${pageDataFileKey} at \"${PAGE_DATA_FILE_PATH}\"`);\n // Download and save page data file in disk.\n await new Promise((resolve, reject) => {\n s3Stream\n .readStream(pageDataFileKey)\n .on(\"error\", reject)\n .pipe(createWriteStream(PAGE_DATA_FILE_PATH))\n .on(\"error\", reject)\n .on(\"finish\", resolve);\n });\n\n // Load the page data file from disk.\n log(`Load file ${pageDataFileKey}`);\n const { page, files } = await loadJson<ExportedPageData>(PAGE_DATA_FILE_PATH);\n\n // Only update page data if there are files.\n if (files && Array.isArray(files) && files.length > 0) {\n // Upload page assets.\n const { fileIdToKeyMap } = await uploadAssets({\n context,\n /**\n * TODO @ts-refactor @ashutosh figure out correct types.\n */\n // @ts-ignore\n filesData: files,\n fileUploadsData\n });\n\n const settings = await context.fileManager.settings.getSettings();\n\n const { srcPrefix = \"\" } = settings || {};\n updateFilesInData({\n data: page.content || {},\n fileIdToKeyMap,\n srcPrefix\n });\n\n page.settings = updateImageInPageSettings({\n settings: page.settings || {},\n fileIdToKeyMap,\n srcPrefix\n });\n }\n\n log(\"Removing Directory for page...\");\n await deleteFile(pageKey);\n\n log(`Remove page contents from S3...`);\n await deleteS3Folder(path.dirname(fileUploadsData.data));\n\n return page;\n}\n\ninterface ImportBlockParams {\n key: string;\n blockKey: string;\n context: PbImportExportContext;\n fileUploadsData: FileUploadsData;\n}\n\nexport async function importBlock({\n blockKey,\n context,\n fileUploadsData\n}: ImportBlockParams): Promise<ExportedBlockData[\"block\"]> {\n const log = console.log;\n\n // Making Directory for block in which we're going to extract the block data file.\n const BLOCK_EXTRACT_DIR = path.join(INSTALL_EXTRACT_DIR, blockKey);\n ensureDirSync(BLOCK_EXTRACT_DIR);\n\n const blockDataFileKey = dotProp.get(fileUploadsData, `data`);\n const BLOCK_DATA_FILE_PATH = path.join(BLOCK_EXTRACT_DIR, path.basename(blockDataFileKey));\n\n log(`Downloading Block data file: ${blockDataFileKey} at \"${BLOCK_DATA_FILE_PATH}\"`);\n // Download and save block data file in disk.\n await new Promise((resolve, reject) => {\n s3Stream\n .readStream(blockDataFileKey)\n .on(\"error\", reject)\n .pipe(createWriteStream(BLOCK_DATA_FILE_PATH))\n .on(\"error\", reject)\n .on(\"finish\", resolve);\n });\n\n // Load the block data file from disk.\n log(`Load file ${blockDataFileKey}`);\n const { block, files } = await loadJson<ExportedBlockData>(BLOCK_DATA_FILE_PATH);\n\n // Only update block data if there are files.\n if (files && Array.isArray(files) && files.length > 0) {\n // Upload block assets.\n const { fileIdToKeyMap } = await uploadAssets({\n context,\n filesData: files,\n fileUploadsData\n });\n\n const settings = await context.fileManager.settings.getSettings();\n\n const { srcPrefix = \"\" } = settings || {};\n updateFilesInData({\n data: block.content || {},\n fileIdToKeyMap,\n srcPrefix\n });\n\n block.preview = updateBlockPreviewImage({\n file: block.preview || {},\n fileIdToKeyMap,\n srcPrefix\n });\n }\n\n log(\"Removing Directory for block...\");\n await deleteFile(blockKey);\n\n log(`Remove block contents from S3...`);\n await deleteS3Folder(path.dirname(fileUploadsData.data));\n\n return block;\n}\n\ninterface ImportTemplateParams {\n key: string;\n templateKey: string;\n context: PbImportExportContext;\n fileUploadsData: FileUploadsData;\n}\n\nexport async function importTemplate({\n templateKey,\n context,\n fileUploadsData\n}: ImportTemplateParams): Promise<ExportedTemplateData[\"template\"]> {\n const log = console.log;\n\n // Making Directory for template in which we're going to extract the template data file.\n const TEMPLATE_EXTRACT_DIR = path.join(INSTALL_EXTRACT_DIR, templateKey);\n ensureDirSync(TEMPLATE_EXTRACT_DIR);\n\n const templateDataFileKey = dotProp.get(fileUploadsData, `data`);\n const TEMPLATE_DATA_FILE_PATH = path.join(\n TEMPLATE_EXTRACT_DIR,\n path.basename(templateDataFileKey)\n );\n\n log(`Downloading Template data file: ${templateDataFileKey} at \"${TEMPLATE_DATA_FILE_PATH}\"`);\n // Download and save template data file in disk.\n await new Promise((resolve, reject) => {\n s3Stream\n .readStream(templateDataFileKey)\n .on(\"error\", reject)\n .pipe(createWriteStream(TEMPLATE_DATA_FILE_PATH))\n .on(\"error\", reject)\n .on(\"finish\", resolve);\n });\n\n // Load the template data file from disk.\n log(`Load file ${templateDataFileKey}`);\n const { template, files } = await loadJson<ExportedTemplateData>(TEMPLATE_DATA_FILE_PATH);\n\n // Only update template data if there are files.\n if (files && Array.isArray(files) && files.length > 0) {\n // Upload template assets.\n const { fileIdToKeyMap } = await uploadAssets({\n context,\n filesData: files,\n fileUploadsData\n });\n\n const settings = await context.fileManager.settings.getSettings();\n\n const { srcPrefix = \"\" } = settings || {};\n updateFilesInData({\n data: template.content || {},\n fileIdToKeyMap,\n srcPrefix\n });\n }\n\n log(\"Removing Directory for template...\");\n await deleteFile(templateKey);\n\n log(`Remove template contents from S3...`);\n await deleteS3Folder(path.dirname(fileUploadsData.data));\n\n return template;\n}\n\ninterface UploadFilesFromZipParams {\n fileKeyToFileMap: Map<string, any>;\n oldKeyToNewKeyMap: Record<string, string>;\n}\n\nasync function uploadFilesFromS3({\n fileKeyToFileMap,\n oldKeyToNewKeyMap\n}: UploadFilesFromZipParams): Promise<S3.ManagedUpload.SendData[]> {\n const oldKeysForAssets = Object.keys(oldKeyToNewKeyMap);\n\n const promises = [];\n // Upload all assets.\n for (let i = 0; i < oldKeysForAssets.length; i++) {\n const oldKey = oldKeysForAssets[i];\n const tempNewKey = oldKeyToNewKeyMap[oldKey];\n\n // Read file.\n const readStream = s3Stream.readStream(tempNewKey);\n // Get file meta data.\n const fileMetaData = fileKeyToFileMap.get(oldKey);\n\n if (fileMetaData) {\n const newKey = uniqueId(\"\", `-${fileMetaData.key}`);\n const { streamPassThrough, streamPassThroughUploadPromise: promise } =\n s3Stream.writeStream(newKey, fileMetaData.type);\n readStream.pipe(streamPassThrough);\n promises.push(promise);\n\n console.log(`Successfully queued file \"${newKey}\"`);\n }\n }\n\n return Promise.all(promises);\n}\n\nfunction getOldFileKey(key: string) {\n /*\n * Because we know the naming convention, we can extract the old key from new key.\n */\n try {\n const [, ...rest] = key.split(\"-\");\n return rest.join(\"-\");\n } catch (e) {\n return key;\n }\n}\n\nconst FILE_CONTENT_TYPE = \"application/octet-stream\";\n\nfunction getFileNameWithoutExt(fileName: string): string {\n return path.basename(fileName).replace(path.extname(fileName), \"\");\n}\n\ninterface ImportData {\n assets: Record<string, string>;\n data: string;\n key: string;\n}\n\n/**\n * Function will read the given zip file from S3 via stream, extract its content and upload it to S3 bucket.\n * @param zipFileUrl\n * @return ImportData S3 file keys for all uploaded assets group by page/block.\n */\nexport async function readExtractAndUploadZipFileContents(\n zipFileUrl: string\n): Promise<ImportData[]> {\n const log = console.log;\n const importDataList = [];\n\n const zipFileName = path.basename(zipFileUrl).split(\"?\")[0];\n\n const response = await fetch(zipFileUrl);\n if (!response.ok) {\n throw new WebinyError(`Unable to downloading file: \"${zipFileUrl}\"`, response.statusText);\n }\n\n const readStream = response.body;\n\n const uniquePath = uniqueId(\"IMPORTS/\");\n // Read export file and download it in the disk\n const ZIP_FILE_PATH = path.join(INSTALL_DIR, zipFileName);\n\n const writeStream = createWriteStream(ZIP_FILE_PATH);\n await streamPipeline(readStream, writeStream);\n log(`Downloaded file \"${zipFileName}\" at ${ZIP_FILE_PATH}`);\n\n // Extract the downloaded zip file\n const zipFilePaths = await extractZipToDisk(ZIP_FILE_PATH);\n\n log(`Removing ZIP file \"${zipFileUrl}\" from ${ZIP_FILE_PATH}`);\n await deleteFile(ZIP_FILE_PATH);\n\n // Extract each page/block zip and upload their content's to S3\n for (let i = 0; i < zipFilePaths.length; i++) {\n const currentPath = zipFilePaths[i];\n const dataMap = await extractZipAndUploadToS3(currentPath, uniquePath);\n importDataList.push(dataMap);\n }\n log(\"Removing all ZIP files located at \", path.dirname(zipFilePaths[0]));\n await deleteFile(path.dirname(zipFilePaths[0]));\n\n return importDataList;\n}\n\nconst ASSETS_DIR_NAME = \"/assets\";\n\nfunction prepareDataDirMap({\n map,\n filePath,\n newKey\n}: {\n map: ImportData;\n filePath: string;\n newKey: string;\n}): ImportData {\n const dirname = path.dirname(filePath);\n const fileName = path.basename(filePath);\n /*\n * We want to use dot (.) as part of object key rather than creating nested object(s).\n * Also, the file name might contain dots in it beside the extension, so, we are escaping them all.\n */\n const oldKey = fileName.replace(/\\./g, \"\\\\.\");\n\n const isAsset = dirname.endsWith(ASSETS_DIR_NAME);\n\n if (isAsset) {\n map = dotProp.set(map, `assets.${oldKey}`, newKey);\n } else {\n // We only need to know the newKey for data file.\n map = dotProp.set(map, `data`, newKey);\n }\n\n return map;\n}\n\nasync function deleteS3Folder(key: string): Promise<void> {\n // Append trailing slash i.e \"/\" to key to make sure we only delete a specific folder.\n if (!key.endsWith(\"/\")) {\n key = `${key}/`;\n }\n\n const response = await s3Stream.listObject(key);\n const keys = (response.Contents || []).map(c => c.Key).filter(Boolean) as string[];\n console.log(`Found ${keys.length} files.`);\n\n const deleteFilePromises = keys.map(key => s3Stream.deleteObject(key));\n\n await Promise.all(deleteFilePromises);\n console.log(`Successfully deleted ${deleteFilePromises.length} files.`);\n}\n\n// export const zeroPad = version => `${version}`.padStart(5, \"0\");\n\nexport function initialStats(total: number) {\n return {\n [ImportExportTaskStatus.PENDING]: total,\n [ImportExportTaskStatus.PROCESSING]: 0,\n [ImportExportTaskStatus.COMPLETED]: 0,\n [ImportExportTaskStatus.FAILED]: 0,\n total\n };\n}\n\nfunction extractZipToDisk(exportFileZipPath: string): Promise<string[]> {\n return new Promise((resolve, reject) => {\n const zipFilePaths: string[] = [];\n const uniqueFolderNameForExport = getFileNameWithoutExt(exportFileZipPath);\n const EXPORT_FILE_EXTRACTION_PATH = path.join(INSTALL_DIR, uniqueFolderNameForExport);\n // Make sure DIR exists\n ensureDirSync(EXPORT_FILE_EXTRACTION_PATH);\n\n yauzl.open(exportFileZipPath, { lazyEntries: true }, function (err, zipFile) {\n if (err) {\n console.warn(\"ERROR: Failed to extract zip: \", exportFileZipPath, err);\n reject(err);\n return;\n }\n if (!zipFile) {\n console.log(\"ERROR: Missing zip file resource for path: \" + exportFileZipPath);\n reject(\"Missing Zip File Resource.\");\n return;\n }\n\n console.info(`The ZIP file contains ${zipFile.entryCount} entries.`);\n\n zipFile.on(\"end\", function (err) {\n if (err) {\n console.warn(\"ERROR: Failed on END event for file: \", exportFileZipPath, err);\n reject(err);\n }\n resolve(zipFilePaths);\n });\n\n zipFile.readEntry();\n\n zipFile.on(\"entry\", function (entry) {\n console.info(`Processing entry: \"${entry.fileName}\"`);\n if (/\\/$/.test(entry.fileName)) {\n // Directory file names end with '/'.\n // Note that entries for directories themselves are optional.\n // An entry's fileName implicitly requires its parent directories to exist.\n zipFile.readEntry();\n } else {\n // file entry\n zipFile.openReadStream(entry, function (err, readStream) {\n if (err) {\n console.warn(\n \"ERROR: Failed to openReadStream for file: \",\n entry.fileName,\n err\n );\n reject(err);\n return;\n }\n if (!readStream) {\n console.log(\n \"ERROR: Missing Read Stream Resource when extracting to disk.\"\n );\n reject(\"Missing Read Stream Resource.\");\n return;\n }\n\n const filePath = path.join(EXPORT_FILE_EXTRACTION_PATH, entry.fileName);\n\n readStream.on(\"end\", function () {\n zipFilePaths.push(filePath);\n zipFile.readEntry();\n });\n\n streamPipeline(readStream, createWriteStream(filePath)).catch(error => {\n reject(error);\n });\n });\n }\n });\n });\n });\n}\n\nfunction extractZipAndUploadToS3(dataZipFilePath: string, uniquePath: string): Promise<ImportData> {\n return new Promise((resolve, reject) => {\n const filePaths = [];\n const fileUploadPromises: Promise<S3.ManagedUpload.SendData>[] = [];\n const uniqueKey = getFileNameWithoutExt(dataZipFilePath);\n let dataMap: ImportData = {\n key: uniqueKey,\n assets: {},\n data: \"\"\n };\n yauzl.open(dataZipFilePath, { lazyEntries: true }, function (err, zipFile) {\n if (err) {\n console.warn(\"ERROR: Failed to extract zip: \", dataZipFilePath, err);\n reject(err);\n return;\n }\n if (!zipFile) {\n console.log(\"ERROR: Probably failed to extract zip: \" + dataZipFilePath);\n reject(\"Missing Zip File Resource.\");\n return;\n }\n console.info(`The ZIP file contains ${zipFile.entryCount} entries.`);\n zipFile.on(\"end\", function (err) {\n if (err) {\n console.warn('ERROR: Failed on \"END\" for file: ', dataZipFilePath, err);\n reject(err);\n }\n\n Promise.all(fileUploadPromises).then(res => {\n res.forEach(r => {\n console.info(\"Done uploading... \", r);\n });\n resolve(dataMap);\n });\n });\n\n zipFile.readEntry();\n\n zipFile.on(\"entry\", function (entry) {\n console.info(`Processing entry: \"${entry.fileName}\"`);\n if (/\\/$/.test(entry.fileName)) {\n // Directory file names end with '/'.\n // Note that entries for directories themselves are optional.\n // An entry's fileName implicitly requires its parent directories to exist.\n zipFile.readEntry();\n } else {\n // file entry\n zipFile.openReadStream(entry, function (err, readStream) {\n if (err) {\n console.warn(\n \"ERROR: Failed while performing [openReadStream] for file: \",\n entry.fileName,\n err\n );\n reject(err);\n return;\n }\n if (!readStream) {\n console.log(\"ERROR: Missing Read Stream while importing.\");\n reject(\"Missing Read Strea Resource.\");\n return;\n }\n readStream.on(\"end\", function () {\n filePaths.push(entry.fileName);\n zipFile.readEntry();\n });\n\n const newKey = `${uniquePath}/${uniqueKey}/${entry.fileName}`;\n // Modify in place\n dataMap = prepareDataDirMap({\n map: dataMap,\n filePath: entry.fileName,\n newKey\n });\n\n const { streamPassThrough, streamPassThroughUploadPromise: promise } =\n s3Stream.writeStream(newKey, FILE_CONTENT_TYPE);\n\n streamPipeline(readStream, streamPassThrough)\n .then(() => {\n fileUploadPromises.push(promise);\n })\n .catch(error => {\n reject(error);\n });\n });\n }\n });\n });\n });\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-page-builder-import-export",
3
- "version": "0.0.0-unstable.1e66d121db",
3
+ "version": "0.0.0-unstable.3386f66516",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "pbie:base"
@@ -16,16 +16,16 @@
16
16
  "dependencies": {
17
17
  "@babel/runtime": "7.19.0",
18
18
  "@commodo/fields": "1.1.2-beta.20",
19
- "@webiny/api": "0.0.0-unstable.1e66d121db",
20
- "@webiny/api-file-manager": "0.0.0-unstable.1e66d121db",
21
- "@webiny/api-page-builder": "0.0.0-unstable.1e66d121db",
22
- "@webiny/api-security": "0.0.0-unstable.1e66d121db",
23
- "@webiny/error": "0.0.0-unstable.1e66d121db",
24
- "@webiny/handler": "0.0.0-unstable.1e66d121db",
25
- "@webiny/handler-aws": "0.0.0-unstable.1e66d121db",
26
- "@webiny/handler-graphql": "0.0.0-unstable.1e66d121db",
27
- "@webiny/utils": "0.0.0-unstable.1e66d121db",
28
- "@webiny/validation": "0.0.0-unstable.1e66d121db",
19
+ "@webiny/api": "0.0.0-unstable.3386f66516",
20
+ "@webiny/api-file-manager": "0.0.0-unstable.3386f66516",
21
+ "@webiny/api-page-builder": "0.0.0-unstable.3386f66516",
22
+ "@webiny/api-security": "0.0.0-unstable.3386f66516",
23
+ "@webiny/error": "0.0.0-unstable.3386f66516",
24
+ "@webiny/handler": "0.0.0-unstable.3386f66516",
25
+ "@webiny/handler-aws": "0.0.0-unstable.3386f66516",
26
+ "@webiny/handler-graphql": "0.0.0-unstable.3386f66516",
27
+ "@webiny/utils": "0.0.0-unstable.3386f66516",
28
+ "@webiny/validation": "0.0.0-unstable.3386f66516",
29
29
  "archiver": "5.3.1",
30
30
  "commodo-fields-object": "1.0.6",
31
31
  "dot-prop-immutable": "2.1.1",
@@ -47,16 +47,16 @@
47
47
  "@types/archiver": "^5.3.1",
48
48
  "@types/node-fetch": "^2.6.1",
49
49
  "@types/yauzl": "^2.9.2",
50
- "@webiny/api-dynamodb-to-elasticsearch": "^0.0.0-unstable.1e66d121db",
51
- "@webiny/api-file-manager-ddb-es": "^0.0.0-unstable.1e66d121db",
52
- "@webiny/api-i18n-ddb": "^0.0.0-unstable.1e66d121db",
53
- "@webiny/api-security-so-ddb": "^0.0.0-unstable.1e66d121db",
54
- "@webiny/api-tenancy": "^0.0.0-unstable.1e66d121db",
55
- "@webiny/api-tenancy-so-ddb": "^0.0.0-unstable.1e66d121db",
56
- "@webiny/api-wcp": "^0.0.0-unstable.1e66d121db",
57
- "@webiny/cli": "^0.0.0-unstable.1e66d121db",
58
- "@webiny/db": "^0.0.0-unstable.1e66d121db",
59
- "@webiny/project-utils": "^0.0.0-unstable.1e66d121db",
50
+ "@webiny/api-dynamodb-to-elasticsearch": "^0.0.0-unstable.3386f66516",
51
+ "@webiny/api-file-manager-ddb-es": "^0.0.0-unstable.3386f66516",
52
+ "@webiny/api-i18n-ddb": "^0.0.0-unstable.3386f66516",
53
+ "@webiny/api-security-so-ddb": "^0.0.0-unstable.3386f66516",
54
+ "@webiny/api-tenancy": "^0.0.0-unstable.3386f66516",
55
+ "@webiny/api-tenancy-so-ddb": "^0.0.0-unstable.3386f66516",
56
+ "@webiny/api-wcp": "^0.0.0-unstable.3386f66516",
57
+ "@webiny/cli": "^0.0.0-unstable.3386f66516",
58
+ "@webiny/db": "^0.0.0-unstable.3386f66516",
59
+ "@webiny/project-utils": "^0.0.0-unstable.3386f66516",
60
60
  "jest": "^28.1.0",
61
61
  "jest-dynalite": "^3.2.0",
62
62
  "rimraf": "^3.0.2",
@@ -78,5 +78,5 @@
78
78
  ]
79
79
  }
80
80
  },
81
- "gitHead": "b670bf27c5039de1a2b0be764a09ba4cb94ad5e2"
81
+ "gitHead": "3386f66516b16fe54e2508243b91dfff1a0156f9"
82
82
  }