@webiny/api-page-builder-import-export 0.0.0-unstable.bca7b3e350 → 0.0.0-unstable.c59b9cc5b9

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 (112) hide show
  1. package/export/combine/formsHandler.d.ts +6 -0
  2. package/export/combine/formsHandler.js +99 -0
  3. package/export/combine/formsHandler.js.map +1 -0
  4. package/export/combine/index.js +5 -0
  5. package/export/combine/index.js.map +1 -1
  6. package/export/process/formsHandler.d.ts +6 -0
  7. package/export/process/formsHandler.js +187 -0
  8. package/export/process/formsHandler.js.map +1 -0
  9. package/export/process/index.js +5 -0
  10. package/export/process/index.js.map +1 -1
  11. package/export/s3Stream.d.ts +5 -2
  12. package/export/s3Stream.js.map +1 -1
  13. package/export/utils.d.ts +8 -1
  14. package/export/utils.js +34 -6
  15. package/export/utils.js.map +1 -1
  16. package/export/zipper.js +2 -2
  17. package/export/zipper.js.map +1 -1
  18. package/graphql/crud/blocks.crud.js +1 -2
  19. package/graphql/crud/blocks.crud.js.map +1 -1
  20. package/graphql/crud/forms.crud.d.ts +4 -0
  21. package/graphql/crud/forms.crud.js +129 -0
  22. package/graphql/crud/forms.crud.js.map +1 -0
  23. package/graphql/crud/importExportTasks.crud.js +2 -7
  24. package/graphql/crud/importExportTasks.crud.js.map +1 -1
  25. package/graphql/crud.js +2 -1
  26. package/graphql/crud.js.map +1 -1
  27. package/graphql/graphql/forms.gql.d.ts +4 -0
  28. package/graphql/graphql/forms.gql.js +60 -0
  29. package/graphql/graphql/forms.gql.js.map +1 -0
  30. package/graphql/graphql.js +2 -1
  31. package/graphql/graphql.js.map +1 -1
  32. package/graphql/types.d.ts +23 -0
  33. package/graphql/types.js.map +1 -1
  34. package/import/constants.d.ts +3 -0
  35. package/import/constants.js +14 -0
  36. package/import/constants.js.map +1 -0
  37. package/import/create/blocksHandler.js +4 -3
  38. package/import/create/blocksHandler.js.map +1 -1
  39. package/import/{process/pagesHandler.d.ts → create/formsHandler.d.ts} +1 -1
  40. package/import/create/formsHandler.js +103 -0
  41. package/import/create/formsHandler.js.map +1 -0
  42. package/import/create/index.js +5 -0
  43. package/import/create/index.js.map +1 -1
  44. package/import/create/pagesHandler.js +3 -2
  45. package/import/create/pagesHandler.js.map +1 -1
  46. package/import/create/templatesHandler.js +2 -1
  47. package/import/create/templatesHandler.js.map +1 -1
  48. package/import/process/{blocksHandler.d.ts → blocks/blocksHandler.d.ts} +2 -2
  49. package/import/process/{blocksHandler.js → blocks/blocksHandler.js} +7 -7
  50. package/import/process/blocks/blocksHandler.js.map +1 -0
  51. package/import/process/blocks/importBlock.d.ts +11 -0
  52. package/import/process/blocks/importBlock.js +92 -0
  53. package/import/process/blocks/importBlock.js.map +1 -0
  54. package/import/process/forms/formsHandler.d.ts +3 -0
  55. package/import/process/forms/formsHandler.js +176 -0
  56. package/import/process/forms/formsHandler.js.map +1 -0
  57. package/import/process/forms/importForm.d.ts +9 -0
  58. package/import/process/forms/importForm.js +43 -0
  59. package/import/process/forms/importForm.js.map +1 -0
  60. package/import/process/index.js +8 -3
  61. package/import/process/index.js.map +1 -1
  62. package/import/process/pages/importPage.d.ts +11 -0
  63. package/import/process/pages/importPage.js +92 -0
  64. package/import/process/pages/importPage.js.map +1 -0
  65. package/import/process/pages/pagesHandler.d.ts +3 -0
  66. package/import/process/{pagesHandler.js → pages/pagesHandler.js} +13 -7
  67. package/import/process/pages/pagesHandler.js.map +1 -0
  68. package/import/process/templates/importTemplate.d.ts +11 -0
  69. package/import/process/templates/importTemplate.js +66 -0
  70. package/import/process/templates/importTemplate.js.map +1 -0
  71. package/import/process/{templatesHandler.d.ts → templates/templatesHandler.d.ts} +2 -2
  72. package/import/process/{templatesHandler.js → templates/templatesHandler.js} +8 -7
  73. package/import/process/templates/templatesHandler.js.map +1 -0
  74. package/import/utils/deleteS3Folder.d.ts +1 -0
  75. package/import/utils/deleteS3Folder.js +19 -0
  76. package/import/utils/deleteS3Folder.js.map +1 -0
  77. package/import/utils/extractAndUploadZipFileContents.d.ts +7 -0
  78. package/import/utils/extractAndUploadZipFileContents.js +122 -0
  79. package/import/utils/extractAndUploadZipFileContents.js.map +1 -0
  80. package/import/utils/extractZipAndUploadToS3.d.ts +2 -0
  81. package/import/utils/extractZipAndUploadToS3.js +98 -0
  82. package/import/utils/extractZipAndUploadToS3.js.map +1 -0
  83. package/import/utils/getFileNameWithoutExt.d.ts +1 -0
  84. package/import/utils/getFileNameWithoutExt.js +11 -0
  85. package/import/utils/getFileNameWithoutExt.js.map +1 -0
  86. package/import/utils/index.d.ts +9 -0
  87. package/import/utils/index.js +104 -0
  88. package/import/utils/index.js.map +1 -0
  89. package/import/utils/initialStats.d.ts +7 -0
  90. package/import/utils/initialStats.js +16 -0
  91. package/import/utils/initialStats.js.map +1 -0
  92. package/import/utils/prepareDataDirMap.d.ts +6 -0
  93. package/import/utils/prepareDataDirMap.js +29 -0
  94. package/import/utils/prepareDataDirMap.js.map +1 -0
  95. package/import/utils/updateFilesInData.d.ts +8 -0
  96. package/import/utils/updateFilesInData.js +48 -0
  97. package/import/utils/updateFilesInData.js.map +1 -0
  98. package/import/utils/uploadAssets.d.ts +10 -0
  99. package/import/utils/uploadAssets.js +49 -0
  100. package/import/utils/uploadAssets.js.map +1 -0
  101. package/import/utils/uploadFilesFromS3.d.ts +3 -0
  102. package/import/utils/uploadFilesFromS3.js +19 -0
  103. package/import/utils/uploadFilesFromS3.js.map +1 -0
  104. package/package.json +35 -35
  105. package/types.d.ts +21 -0
  106. package/types.js.map +1 -1
  107. package/import/process/blocksHandler.js.map +0 -1
  108. package/import/process/pagesHandler.js.map +0 -1
  109. package/import/process/templatesHandler.js.map +0 -1
  110. package/import/utils.d.ts +0 -56
  111. package/import/utils.js +0 -607
  112. package/import/utils.js.map +0 -1
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.initialStats = initialStats;
7
+ var _types = require("../../types");
8
+ function initialStats(total) {
9
+ return {
10
+ [_types.ImportExportTaskStatus.PENDING]: total,
11
+ [_types.ImportExportTaskStatus.PROCESSING]: 0,
12
+ [_types.ImportExportTaskStatus.COMPLETED]: 0,
13
+ [_types.ImportExportTaskStatus.FAILED]: 0,
14
+ total
15
+ };
16
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["initialStats","total","ImportExportTaskStatus","PENDING","PROCESSING","COMPLETED","FAILED"],"sources":["initialStats.ts"],"sourcesContent":["import { ImportExportTaskStatus } from \"~/types\";\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"],"mappings":";;;;;;AAAA;AAEO,SAASA,YAAY,CAACC,KAAa,EAAE;EACxC,OAAO;IACH,CAACC,6BAAsB,CAACC,OAAO,GAAGF,KAAK;IACvC,CAACC,6BAAsB,CAACE,UAAU,GAAG,CAAC;IACtC,CAACF,6BAAsB,CAACG,SAAS,GAAG,CAAC;IACrC,CAACH,6BAAsB,CAACI,MAAM,GAAG,CAAC;IAClCL;EACJ,CAAC;AACL"}
@@ -0,0 +1,6 @@
1
+ import { ImportData } from "../../types";
2
+ export declare function prepareDataDirMap({ map, filePath, newKey }: {
3
+ map: ImportData;
4
+ filePath: string;
5
+ newKey: string;
6
+ }): ImportData;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.prepareDataDirMap = prepareDataDirMap;
8
+ var _dotPropImmutable = _interopRequireDefault(require("dot-prop-immutable"));
9
+ var _constants = require("../constants");
10
+ function prepareDataDirMap({
11
+ map,
12
+ filePath,
13
+ newKey
14
+ }) {
15
+ const isAsset = filePath.includes(_constants.ASSETS_DIR_NAME);
16
+ if (isAsset) {
17
+ /*
18
+ * We want to use dot (.) as part of object key rather than creating nested object(s).
19
+ * Also, the file name might contain dots in it beside the extension, so, we are escaping them all.
20
+ */
21
+ const assetKey = filePath.split(`${_constants.ASSETS_DIR_NAME}/`).pop();
22
+ const oldKey = assetKey.replace(/\./g, "\\.");
23
+ map = _dotPropImmutable.default.set(map, `assets.${oldKey}`, newKey);
24
+ } else {
25
+ // We only need to know the newKey for data file.
26
+ map = _dotPropImmutable.default.set(map, `data`, newKey);
27
+ }
28
+ return map;
29
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["prepareDataDirMap","map","filePath","newKey","isAsset","includes","ASSETS_DIR_NAME","assetKey","split","pop","oldKey","replace","dotProp","set"],"sources":["prepareDataDirMap.ts"],"sourcesContent":["import dotProp from \"dot-prop-immutable\";\nimport { ImportData } from \"~/types\";\nimport { ASSETS_DIR_NAME } from \"~/import/constants\";\n\nexport function prepareDataDirMap({\n map,\n filePath,\n newKey\n}: {\n map: ImportData;\n filePath: string;\n newKey: string;\n}): ImportData {\n const isAsset = filePath.includes(ASSETS_DIR_NAME);\n\n if (isAsset) {\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 assetKey = filePath.split(`${ASSETS_DIR_NAME}/`).pop() as string;\n const oldKey = assetKey.replace(/\\./g, \"\\\\.\");\n\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"],"mappings":";;;;;;;AAAA;AAEA;AAEO,SAASA,iBAAiB,CAAC;EAC9BC,GAAG;EACHC,QAAQ;EACRC;AAKJ,CAAC,EAAc;EACX,MAAMC,OAAO,GAAGF,QAAQ,CAACG,QAAQ,CAACC,0BAAe,CAAC;EAElD,IAAIF,OAAO,EAAE;IACT;AACR;AACA;AACA;IACQ,MAAMG,QAAQ,GAAGL,QAAQ,CAACM,KAAK,CAAE,GAAEF,0BAAgB,GAAE,CAAC,CAACG,GAAG,EAAY;IACtE,MAAMC,MAAM,GAAGH,QAAQ,CAACI,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;IAE7CV,GAAG,GAAGW,yBAAO,CAACC,GAAG,CAACZ,GAAG,EAAG,UAASS,MAAO,EAAC,EAAEP,MAAM,CAAC;EACtD,CAAC,MAAM;IACH;IACAF,GAAG,GAAGW,yBAAO,CAACC,GAAG,CAACZ,GAAG,EAAG,MAAK,EAAEE,MAAM,CAAC;EAC1C;EAEA,OAAOF,GAAG;AACd"}
@@ -0,0 +1,8 @@
1
+ import { FileInput } from "@webiny/api-file-manager/types";
2
+ interface UpdateFilesInDataParams {
3
+ data: Record<string, any>;
4
+ fileIdToNewFileMap: Map<string, FileInput>;
5
+ srcPrefix: string;
6
+ }
7
+ export declare function updateFilesInData({ data, fileIdToNewFileMap, srcPrefix }: UpdateFilesInDataParams): void;
8
+ export {};
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.updateFilesInData = updateFilesInData;
7
+ function updateFilesInData({
8
+ data,
9
+ fileIdToNewFileMap,
10
+ srcPrefix
11
+ }) {
12
+ if (!data || typeof data !== "object") {
13
+ return;
14
+ }
15
+ // Recursively call function if data is array
16
+ if (Array.isArray(data)) {
17
+ for (let i = 0; i < data.length; i++) {
18
+ const element = data[i];
19
+ updateFilesInData({
20
+ data: element,
21
+ fileIdToNewFileMap,
22
+ srcPrefix
23
+ });
24
+ }
25
+ return;
26
+ }
27
+ // Main logic
28
+ const tuple = Object.entries(data);
29
+ for (let i = 0; i < tuple.length; i++) {
30
+ const [key, value] = tuple[i];
31
+ if (key === "file" && value && fileIdToNewFileMap.has(value.id)) {
32
+ const newFile = fileIdToNewFileMap.get(value.id);
33
+ if (!newFile) {
34
+ continue;
35
+ }
36
+ const cleanSrcPrefix = srcPrefix.endsWith("/") ? srcPrefix.slice(0, -1) : srcPrefix;
37
+ value.key = newFile.key;
38
+ value.name = newFile.name;
39
+ value.src = `${cleanSrcPrefix}/${newFile.key}`;
40
+ } else {
41
+ updateFilesInData({
42
+ data: value,
43
+ srcPrefix,
44
+ fileIdToNewFileMap
45
+ });
46
+ }
47
+ }
48
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["updateFilesInData","data","fileIdToNewFileMap","srcPrefix","Array","isArray","i","length","element","tuple","Object","entries","key","value","has","id","newFile","get","cleanSrcPrefix","endsWith","slice","name","src"],"sources":["updateFilesInData.ts"],"sourcesContent":["import { FileInput } from \"@webiny/api-file-manager/types\";\n\ninterface UpdateFilesInDataParams {\n data: Record<string, any>;\n fileIdToNewFileMap: Map<string, FileInput>;\n srcPrefix: string;\n}\n\nexport function updateFilesInData({\n data,\n fileIdToNewFileMap,\n srcPrefix\n}: UpdateFilesInDataParams) {\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, fileIdToNewFileMap, 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 && fileIdToNewFileMap.has(value.id)) {\n const newFile = fileIdToNewFileMap.get(value.id);\n if (!newFile) {\n continue;\n }\n\n const cleanSrcPrefix = srcPrefix.endsWith(\"/\") ? srcPrefix.slice(0, -1) : srcPrefix;\n\n value.key = newFile.key;\n value.name = newFile.name;\n value.src = `${cleanSrcPrefix}/${newFile.key}`;\n } else {\n updateFilesInData({ data: value, srcPrefix, fileIdToNewFileMap });\n }\n }\n}\n"],"mappings":";;;;;;AAQO,SAASA,iBAAiB,CAAC;EAC9BC,IAAI;EACJC,kBAAkB;EAClBC;AACqB,CAAC,EAAE;EACxB,IAAI,CAACF,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IACnC;EACJ;EACA;EACA,IAAIG,KAAK,CAACC,OAAO,CAACJ,IAAI,CAAC,EAAE;IACrB,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,IAAI,CAACM,MAAM,EAAED,CAAC,EAAE,EAAE;MAClC,MAAME,OAAO,GAAGP,IAAI,CAACK,CAAC,CAAC;MACvBN,iBAAiB,CAAC;QAAEC,IAAI,EAAEO,OAAO;QAAEN,kBAAkB;QAAEC;MAAU,CAAC,CAAC;IACvE;IACA;EACJ;EACA;EACA,MAAMM,KAAK,GAAGC,MAAM,CAACC,OAAO,CAACV,IAAI,CAAC;EAClC,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGG,KAAK,CAACF,MAAM,EAAED,CAAC,EAAE,EAAE;IACnC,MAAM,CAACM,GAAG,EAAEC,KAAK,CAAC,GAAGJ,KAAK,CAACH,CAAC,CAAC;IAE7B,IAAIM,GAAG,KAAK,MAAM,IAAIC,KAAK,IAAIX,kBAAkB,CAACY,GAAG,CAACD,KAAK,CAACE,EAAE,CAAC,EAAE;MAC7D,MAAMC,OAAO,GAAGd,kBAAkB,CAACe,GAAG,CAACJ,KAAK,CAACE,EAAE,CAAC;MAChD,IAAI,CAACC,OAAO,EAAE;QACV;MACJ;MAEA,MAAME,cAAc,GAAGf,SAAS,CAACgB,QAAQ,CAAC,GAAG,CAAC,GAAGhB,SAAS,CAACiB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAGjB,SAAS;MAEnFU,KAAK,CAACD,GAAG,GAAGI,OAAO,CAACJ,GAAG;MACvBC,KAAK,CAACQ,IAAI,GAAGL,OAAO,CAACK,IAAI;MACzBR,KAAK,CAACS,GAAG,GAAI,GAAEJ,cAAe,IAAGF,OAAO,CAACJ,GAAI,EAAC;IAClD,CAAC,MAAM;MACHZ,iBAAiB,CAAC;QAAEC,IAAI,EAAEY,KAAK;QAAEV,SAAS;QAAED;MAAmB,CAAC,CAAC;IACrE;EACJ;AACJ"}
@@ -0,0 +1,10 @@
1
+ import { PbImportExportContext } from "../../graphql/types";
2
+ import { File, FileInput } from "@webiny/api-file-manager/types";
3
+ import { FileUploadsData } from "../../types";
4
+ interface UploadAssetsParams {
5
+ context: PbImportExportContext;
6
+ files: File[];
7
+ fileUploadsData: FileUploadsData;
8
+ }
9
+ export declare const uploadAssets: (params: UploadAssetsParams) => Promise<Map<string, FileInput>>;
10
+ export {};
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.uploadAssets = void 0;
8
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
+ var _utils = require("@webiny/utils");
10
+ var _uploadFilesFromS = require("./uploadFilesFromS3");
11
+ const uploadAssets = async params => {
12
+ const {
13
+ context,
14
+ files,
15
+ fileUploadsData
16
+ } = params;
17
+ const oldIdToNewFileMap = new Map();
18
+
19
+ /**
20
+ * This function contains logic of file download from S3.
21
+ * Current we're not mocking zip file download from S3 in tests at the moment.
22
+ * So, we're manually mocking it in case of test just by returning an empty object.
23
+ */
24
+ if (process.env.NODE_ENV === "test") {
25
+ return oldIdToNewFileMap;
26
+ }
27
+
28
+ // A map of temporary file keys (created during ZIP upload) to permanent file keys.
29
+ const uploadFileMap = new Map();
30
+
31
+ // Array of file inputs, to insert into the DB.
32
+ const createFilesInput = [];
33
+ for (const oldFile of files) {
34
+ const id = (0, _utils.mdbid)();
35
+ // We replace the old file ID with a new one.
36
+ const newKey = `${id}/${oldFile.key.replace(`${oldFile.id}/`, "")}`;
37
+ const newFile = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, oldFile), {}, {
38
+ id,
39
+ key: newKey
40
+ });
41
+ createFilesInput.push(newFile);
42
+ oldIdToNewFileMap.set(oldFile.id, newFile);
43
+ uploadFileMap.set(fileUploadsData.assets[oldFile.key], newFile);
44
+ }
45
+ await (0, _uploadFilesFromS.uploadFilesFromS3)(uploadFileMap);
46
+ await context.fileManager.createFilesInBatch(createFilesInput);
47
+ return oldIdToNewFileMap;
48
+ };
49
+ exports.uploadAssets = uploadAssets;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["uploadAssets","params","context","files","fileUploadsData","oldIdToNewFileMap","Map","process","env","NODE_ENV","uploadFileMap","createFilesInput","oldFile","id","mdbid","newKey","key","replace","newFile","push","set","assets","uploadFilesFromS3","fileManager","createFilesInBatch"],"sources":["uploadAssets.ts"],"sourcesContent":["import { mdbid } from \"@webiny/utils\";\nimport { PbImportExportContext } from \"~/graphql/types\";\nimport { File, FileInput } from \"@webiny/api-file-manager/types\";\nimport { UploadFileMap, uploadFilesFromS3 } from \"~/import/utils/uploadFilesFromS3\";\nimport { FileUploadsData } from \"~/types\";\n\ninterface UploadAssetsParams {\n context: PbImportExportContext;\n files: File[];\n fileUploadsData: FileUploadsData;\n}\n\nexport const uploadAssets = async (params: UploadAssetsParams) => {\n const { context, files, fileUploadsData } = params;\n\n const oldIdToNewFileMap = new Map<string, FileInput>();\n\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 oldIdToNewFileMap;\n }\n\n // A map of temporary file keys (created during ZIP upload) to permanent file keys.\n const uploadFileMap: UploadFileMap = new Map();\n\n // Array of file inputs, to insert into the DB.\n const createFilesInput: FileInput[] = [];\n\n for (const oldFile of files) {\n const id = mdbid();\n // We replace the old file ID with a new one.\n const newKey = `${id}/${oldFile.key.replace(`${oldFile.id}/`, \"\")}`;\n const newFile: FileInput = { ...oldFile, id, key: newKey };\n\n createFilesInput.push(newFile);\n oldIdToNewFileMap.set(oldFile.id, newFile);\n uploadFileMap.set(fileUploadsData.assets[oldFile.key], newFile);\n }\n\n await uploadFilesFromS3(uploadFileMap);\n\n await context.fileManager.createFilesInBatch(createFilesInput);\n\n return oldIdToNewFileMap;\n};\n"],"mappings":";;;;;;;;AAAA;AAGA;AASO,MAAMA,YAAY,GAAG,MAAOC,MAA0B,IAAK;EAC9D,MAAM;IAAEC,OAAO;IAAEC,KAAK;IAAEC;EAAgB,CAAC,GAAGH,MAAM;EAElD,MAAMI,iBAAiB,GAAG,IAAIC,GAAG,EAAqB;;EAEtD;AACJ;AACA;AACA;AACA;EACI,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,MAAM,EAAE;IACjC,OAAOJ,iBAAiB;EAC5B;;EAEA;EACA,MAAMK,aAA4B,GAAG,IAAIJ,GAAG,EAAE;;EAE9C;EACA,MAAMK,gBAA6B,GAAG,EAAE;EAExC,KAAK,MAAMC,OAAO,IAAIT,KAAK,EAAE;IACzB,MAAMU,EAAE,GAAG,IAAAC,YAAK,GAAE;IAClB;IACA,MAAMC,MAAM,GAAI,GAAEF,EAAG,IAAGD,OAAO,CAACI,GAAG,CAACC,OAAO,CAAE,GAAEL,OAAO,CAACC,EAAG,GAAE,EAAE,EAAE,CAAE,EAAC;IACnE,MAAMK,OAAkB,+DAAQN,OAAO;MAAEC,EAAE;MAAEG,GAAG,EAAED;IAAM,EAAE;IAE1DJ,gBAAgB,CAACQ,IAAI,CAACD,OAAO,CAAC;IAC9Bb,iBAAiB,CAACe,GAAG,CAACR,OAAO,CAACC,EAAE,EAAEK,OAAO,CAAC;IAC1CR,aAAa,CAACU,GAAG,CAAChB,eAAe,CAACiB,MAAM,CAACT,OAAO,CAACI,GAAG,CAAC,EAAEE,OAAO,CAAC;EACnE;EAEA,MAAM,IAAAI,mCAAiB,EAACZ,aAAa,CAAC;EAEtC,MAAMR,OAAO,CAACqB,WAAW,CAACC,kBAAkB,CAACb,gBAAgB,CAAC;EAE9D,OAAON,iBAAiB;AAC5B,CAAC;AAAC"}
@@ -0,0 +1,3 @@
1
+ import { FileInput } from "@webiny/api-file-manager/types";
2
+ export declare type UploadFileMap = Map<string, FileInput>;
3
+ export declare function uploadFilesFromS3(fileMap: UploadFileMap): Promise<import("aws-sdk/clients/s3").ManagedUpload.SendData[]>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.uploadFilesFromS3 = uploadFilesFromS3;
7
+ var _s3Stream = require("../../export/s3Stream");
8
+ async function uploadFilesFromS3(fileMap) {
9
+ const promises = [];
10
+ for (const [source, target] of Array.from(fileMap.entries())) {
11
+ // Read file.
12
+ const readStream = _s3Stream.s3Stream.readStream(source);
13
+ const ws = _s3Stream.s3Stream.writeStream(target.key, target.type);
14
+ readStream.pipe(ws.streamPassThrough);
15
+ promises.push(ws.streamPassThroughUploadPromise);
16
+ console.log(`Successfully queued file "${target.key}"`);
17
+ }
18
+ return Promise.all(promises);
19
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["uploadFilesFromS3","fileMap","promises","source","target","Array","from","entries","readStream","s3Stream","ws","writeStream","key","type","pipe","streamPassThrough","push","streamPassThroughUploadPromise","console","log","Promise","all"],"sources":["uploadFilesFromS3.ts"],"sourcesContent":["import { s3Stream } from \"~/export/s3Stream\";\nimport { FileInput } from \"@webiny/api-file-manager/types\";\n\nexport type UploadFileMap = Map<string, FileInput>;\n\nexport async function uploadFilesFromS3(fileMap: UploadFileMap) {\n const promises = [];\n for (const [source, target] of Array.from(fileMap.entries())) {\n // Read file.\n const readStream = s3Stream.readStream(source);\n\n const ws = s3Stream.writeStream(target.key, target.type);\n readStream.pipe(ws.streamPassThrough);\n promises.push(ws.streamPassThroughUploadPromise);\n\n console.log(`Successfully queued file \"${target.key}\"`);\n }\n\n return Promise.all(promises);\n}\n"],"mappings":";;;;;;AAAA;AAKO,eAAeA,iBAAiB,CAACC,OAAsB,EAAE;EAC5D,MAAMC,QAAQ,GAAG,EAAE;EACnB,KAAK,MAAM,CAACC,MAAM,EAAEC,MAAM,CAAC,IAAIC,KAAK,CAACC,IAAI,CAACL,OAAO,CAACM,OAAO,EAAE,CAAC,EAAE;IAC1D;IACA,MAAMC,UAAU,GAAGC,kBAAQ,CAACD,UAAU,CAACL,MAAM,CAAC;IAE9C,MAAMO,EAAE,GAAGD,kBAAQ,CAACE,WAAW,CAACP,MAAM,CAACQ,GAAG,EAAER,MAAM,CAACS,IAAI,CAAC;IACxDL,UAAU,CAACM,IAAI,CAACJ,EAAE,CAACK,iBAAiB,CAAC;IACrCb,QAAQ,CAACc,IAAI,CAACN,EAAE,CAACO,8BAA8B,CAAC;IAEhDC,OAAO,CAACC,GAAG,CAAE,6BAA4Bf,MAAM,CAACQ,GAAI,GAAE,CAAC;EAC3D;EAEA,OAAOQ,OAAO,CAACC,GAAG,CAACnB,QAAQ,CAAC;AAChC"}
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.bca7b3e350",
3
+ "version": "0.0.0-unstable.c59b9cc5b9",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "pbie:base"
@@ -16,51 +16,51 @@
16
16
  "dependencies": {
17
17
  "@babel/runtime": "7.20.13",
18
18
  "@commodo/fields": "1.1.2-beta.20",
19
- "@webiny/api": "0.0.0-unstable.bca7b3e350",
20
- "@webiny/api-file-manager": "0.0.0-unstable.bca7b3e350",
21
- "@webiny/api-page-builder": "0.0.0-unstable.bca7b3e350",
22
- "@webiny/api-security": "0.0.0-unstable.bca7b3e350",
23
- "@webiny/error": "0.0.0-unstable.bca7b3e350",
24
- "@webiny/handler": "0.0.0-unstable.bca7b3e350",
25
- "@webiny/handler-aws": "0.0.0-unstable.bca7b3e350",
26
- "@webiny/handler-graphql": "0.0.0-unstable.bca7b3e350",
27
- "@webiny/utils": "0.0.0-unstable.bca7b3e350",
28
- "@webiny/validation": "0.0.0-unstable.bca7b3e350",
19
+ "@webiny/api": "0.0.0-unstable.c59b9cc5b9",
20
+ "@webiny/api-file-manager": "0.0.0-unstable.c59b9cc5b9",
21
+ "@webiny/api-form-builder": "0.0.0-unstable.c59b9cc5b9",
22
+ "@webiny/api-page-builder": "0.0.0-unstable.c59b9cc5b9",
23
+ "@webiny/api-security": "0.0.0-unstable.c59b9cc5b9",
24
+ "@webiny/error": "0.0.0-unstable.c59b9cc5b9",
25
+ "@webiny/handler": "0.0.0-unstable.c59b9cc5b9",
26
+ "@webiny/handler-aws": "0.0.0-unstable.c59b9cc5b9",
27
+ "@webiny/handler-graphql": "0.0.0-unstable.c59b9cc5b9",
28
+ "@webiny/utils": "0.0.0-unstable.c59b9cc5b9",
29
+ "@webiny/validation": "0.0.0-unstable.c59b9cc5b9",
29
30
  "archiver": "5.3.1",
30
31
  "commodo-fields-object": "1.0.6",
31
32
  "dot-prop-immutable": "2.1.1",
32
33
  "fs-extra": "9.1.0",
33
34
  "load-json-file": "6.2.0",
34
35
  "lodash": "4.17.21",
35
- "mdbid": "1.0.0",
36
36
  "node-fetch": "2.6.9",
37
37
  "stream": "0.0.2",
38
38
  "uniqid": "5.4.0",
39
39
  "yauzl": "2.10.0"
40
40
  },
41
41
  "devDependencies": {
42
- "@babel/cli": "^7.19.3",
43
- "@babel/core": "^7.19.3",
44
- "@babel/plugin-proposal-export-default-from": "^7.16.0",
45
- "@babel/preset-env": "^7.19.4",
46
- "@babel/preset-typescript": "^7.18.6",
47
- "@types/archiver": "^5.3.1",
48
- "@types/node-fetch": "^2.6.1",
49
- "@types/yauzl": "^2.9.2",
50
- "@webiny/api-dynamodb-to-elasticsearch": "^0.0.0-unstable.bca7b3e350",
51
- "@webiny/api-file-manager-ddb-es": "^0.0.0-unstable.bca7b3e350",
52
- "@webiny/api-i18n-ddb": "^0.0.0-unstable.bca7b3e350",
53
- "@webiny/api-security-so-ddb": "^0.0.0-unstable.bca7b3e350",
54
- "@webiny/api-tenancy": "^0.0.0-unstable.bca7b3e350",
55
- "@webiny/api-tenancy-so-ddb": "^0.0.0-unstable.bca7b3e350",
56
- "@webiny/api-wcp": "^0.0.0-unstable.bca7b3e350",
57
- "@webiny/cli": "^0.0.0-unstable.bca7b3e350",
58
- "@webiny/db": "^0.0.0-unstable.bca7b3e350",
59
- "@webiny/project-utils": "^0.0.0-unstable.bca7b3e350",
60
- "jest": "^28.1.0",
61
- "jest-dynalite": "^3.2.0",
62
- "rimraf": "^3.0.2",
63
- "ttypescript": "^1.5.12",
42
+ "@babel/cli": "7.20.7",
43
+ "@babel/core": "7.20.12",
44
+ "@babel/plugin-proposal-export-default-from": "7.18.10",
45
+ "@babel/preset-env": "7.20.2",
46
+ "@babel/preset-typescript": "7.18.6",
47
+ "@types/archiver": "5.3.1",
48
+ "@types/node-fetch": "2.6.2",
49
+ "@types/yauzl": "2.10.0",
50
+ "@webiny/api-dynamodb-to-elasticsearch": "0.0.0-unstable.c59b9cc5b9",
51
+ "@webiny/api-file-manager-ddb-es": "0.0.0-unstable.c59b9cc5b9",
52
+ "@webiny/api-i18n-ddb": "0.0.0-unstable.c59b9cc5b9",
53
+ "@webiny/api-security-so-ddb": "0.0.0-unstable.c59b9cc5b9",
54
+ "@webiny/api-tenancy": "0.0.0-unstable.c59b9cc5b9",
55
+ "@webiny/api-tenancy-so-ddb": "0.0.0-unstable.c59b9cc5b9",
56
+ "@webiny/api-wcp": "0.0.0-unstable.c59b9cc5b9",
57
+ "@webiny/cli": "0.0.0-unstable.c59b9cc5b9",
58
+ "@webiny/db": "0.0.0-unstable.c59b9cc5b9",
59
+ "@webiny/project-utils": "0.0.0-unstable.c59b9cc5b9",
60
+ "jest": "28.1.3",
61
+ "jest-dynalite": "3.6.1",
62
+ "rimraf": "3.0.2",
63
+ "ttypescript": "1.5.15",
64
64
  "typescript": "4.7.4"
65
65
  },
66
66
  "publishConfig": {
@@ -78,5 +78,5 @@
78
78
  ]
79
79
  }
80
80
  },
81
- "gitHead": "bca7b3e35084d7012061bda0d3f08202fe611581"
81
+ "gitHead": "c59b9cc5b96b7fd91388de93c7fff2d977d25220"
82
82
  }
package/types.d.ts CHANGED
@@ -188,3 +188,24 @@ export interface ImportExportTaskStorageOperations {
188
188
  createSubTask(params: ImportExportTaskStorageOperationsCreateSubTaskParams): Promise<ImportExportTask>;
189
189
  updateSubTask(params: ImportExportTaskStorageOperationsUpdateSubTaskParams): Promise<ImportExportTask>;
190
190
  }
191
+ export interface FileUploadsData {
192
+ /**
193
+ * Location of export data file. Export data contains the relevant entity data (block, page, template), and an
194
+ * array of file objects, exported from the DB, that need to be imported.
195
+ *
196
+ * Example:
197
+ * 'IMPORTS/8lf6y7xp5/8lf6x9v68-header-1/8lf6x9v69-header-1/Header #1.json'
198
+ */
199
+ data: string;
200
+ /**
201
+ * Example:
202
+ * '8ldspraka-9l9iaffak-1.jpeg': 'IMPORTS/8lf6y7xp5/8lf6x9v68-header-1/assets/8ldspraka-9l9iaffak-1.jpeg',
203
+ * '8ldwyq8ao-pb-editor-page-element-rzfKWtdTWN.png': 'IMPORTS/8lf6y7xp5/8lf6x9v69-header-1/assets/8ldwyq8ao-pb-editor-page-element-rzfKWtdTWN.png'
204
+ */
205
+ assets: Record<string, string>;
206
+ }
207
+ export interface ImportData {
208
+ assets: Record<string, string>;
209
+ data: string;
210
+ key: string;
211
+ }
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["ExportRevisionType","ImportExportTaskStatus"],"sources":["types.ts"],"sourcesContent":["export * from \"./graphql/types\";\n\n// Entities.\nexport enum ExportRevisionType {\n PUBLISHED = \"published\",\n LATEST = \"latest\"\n}\n\nexport enum ImportExportTaskStatus {\n PENDING = \"pending\",\n PROCESSING = \"processing\",\n COMPLETED = \"completed\",\n FAILED = \"failed\"\n}\n\nexport interface ImportExportTaskStats {\n [ImportExportTaskStatus.PENDING]: number;\n [ImportExportTaskStatus.PROCESSING]: number;\n [ImportExportTaskStatus.COMPLETED]: number;\n [ImportExportTaskStatus.FAILED]: number;\n total: number;\n}\n\ninterface CreatedBy {\n id: string;\n type: string;\n displayName: string | null;\n}\n\nexport interface ImportExportTask {\n id: string;\n parent: string;\n status: ImportExportTaskStatus;\n data: Record<string, any>;\n stats: ImportExportTaskStats;\n error: Record<string, any>;\n input: Record<string, any>;\n createdOn: string;\n createdBy: CreatedBy;\n tenant: string;\n locale: string;\n}\n\nexport interface File {\n id: string;\n src: string;\n}\n\nexport interface MetaResponse {\n cursor: string | null;\n totalCount: number;\n hasMoreItems: boolean;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsGetParams {\n where: {\n id: string;\n tenant: string;\n locale: string;\n };\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsListParams {\n where: {\n tenant: string;\n locale: string;\n };\n sort?: string[];\n limit?: number;\n after?: string | null;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport type ImportExportTaskStorageOperationsListResponse = [ImportExportTask[], MetaResponse];\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsCreateParams {\n input: Record<string, any>;\n task: ImportExportTask;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsUpdateParams {\n input: Record<string, any>;\n original: ImportExportTask;\n task: ImportExportTask;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsDeleteParams {\n task: ImportExportTask;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsGetSubTaskParams {\n where: {\n id: string;\n parent: string;\n tenant: string;\n locale: string;\n };\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsListSubTaskParams {\n where: {\n tenant: string;\n locale: string;\n parent: string;\n status: ImportExportTaskStatus;\n createdBy?: string;\n };\n sort?: string[];\n limit?: number;\n after?: string | null;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport type ImportExportTaskStorageOperationsListSubTaskResponse = [\n ImportExportTask[],\n MetaResponse\n];\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsCreateSubTaskParams {\n input: Record<string, any>;\n subTask: ImportExportTask;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsUpdateSubTaskParams {\n input: Record<string, any>;\n original: ImportExportTask;\n subTask: ImportExportTask;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsUpdateTaskStatsParams {\n input: {\n prevStatus: ImportExportTaskStatus;\n nextStatus: ImportExportTaskStatus;\n };\n original: ImportExportTask;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperations {\n /**\n * Get a single import export task item by given params.\n */\n getTask(params: ImportExportTaskStorageOperationsGetParams): Promise<ImportExportTask | null>;\n\n /**\n * Get all import export tasks by given params.\n */\n listTasks(\n params: ImportExportTaskStorageOperationsListParams\n ): Promise<ImportExportTaskStorageOperationsListResponse>;\n\n createTask(params: ImportExportTaskStorageOperationsCreateParams): Promise<ImportExportTask>;\n\n updateTask(params: ImportExportTaskStorageOperationsUpdateParams): Promise<ImportExportTask>;\n\n deleteTask(params: ImportExportTaskStorageOperationsDeleteParams): Promise<ImportExportTask>;\n\n updateTaskStats(\n params: ImportExportTaskStorageOperationsUpdateTaskStatsParams\n ): Promise<ImportExportTask>;\n\n /**\n * Get a single import export sub-task item by given params.\n */\n getSubTask(\n params: ImportExportTaskStorageOperationsGetSubTaskParams\n ): Promise<ImportExportTask | null>;\n\n /**\n * Get all import export sub-tasks by given params.\n */\n listSubTasks(\n params: ImportExportTaskStorageOperationsListSubTaskParams\n ): Promise<ImportExportTaskStorageOperationsListSubTaskResponse>;\n\n createSubTask(\n params: ImportExportTaskStorageOperationsCreateSubTaskParams\n ): Promise<ImportExportTask>;\n\n updateSubTask(\n params: ImportExportTaskStorageOperationsUpdateSubTaskParams\n ): Promise<ImportExportTask>;\n}\n"],"mappings":";;;;;;;;;;AAAA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AAEA;AAAA,IACYA,kBAAkB;AAAA;AAAA,WAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;AAAA,GAAlBA,kBAAkB,kCAAlBA,kBAAkB;AAAA,IAKlBC,sBAAsB;AAAA;AAAA,WAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;AAAA,GAAtBA,sBAAsB,sCAAtBA,sBAAsB"}
1
+ {"version":3,"names":["ExportRevisionType","ImportExportTaskStatus"],"sources":["types.ts"],"sourcesContent":["export * from \"./graphql/types\";\n\n// Entities.\nexport enum ExportRevisionType {\n PUBLISHED = \"published\",\n LATEST = \"latest\"\n}\n\nexport enum ImportExportTaskStatus {\n PENDING = \"pending\",\n PROCESSING = \"processing\",\n COMPLETED = \"completed\",\n FAILED = \"failed\"\n}\n\nexport interface ImportExportTaskStats {\n [ImportExportTaskStatus.PENDING]: number;\n [ImportExportTaskStatus.PROCESSING]: number;\n [ImportExportTaskStatus.COMPLETED]: number;\n [ImportExportTaskStatus.FAILED]: number;\n total: number;\n}\n\ninterface CreatedBy {\n id: string;\n type: string;\n displayName: string | null;\n}\n\nexport interface ImportExportTask {\n id: string;\n parent: string;\n status: ImportExportTaskStatus;\n data: Record<string, any>;\n stats: ImportExportTaskStats;\n error: Record<string, any>;\n input: Record<string, any>;\n createdOn: string;\n createdBy: CreatedBy;\n tenant: string;\n locale: string;\n}\n\nexport interface File {\n id: string;\n src: string;\n}\n\nexport interface MetaResponse {\n cursor: string | null;\n totalCount: number;\n hasMoreItems: boolean;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsGetParams {\n where: {\n id: string;\n tenant: string;\n locale: string;\n };\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsListParams {\n where: {\n tenant: string;\n locale: string;\n };\n sort?: string[];\n limit?: number;\n after?: string | null;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport type ImportExportTaskStorageOperationsListResponse = [ImportExportTask[], MetaResponse];\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsCreateParams {\n input: Record<string, any>;\n task: ImportExportTask;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsUpdateParams {\n input: Record<string, any>;\n original: ImportExportTask;\n task: ImportExportTask;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsDeleteParams {\n task: ImportExportTask;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsGetSubTaskParams {\n where: {\n id: string;\n parent: string;\n tenant: string;\n locale: string;\n };\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsListSubTaskParams {\n where: {\n tenant: string;\n locale: string;\n parent: string;\n status: ImportExportTaskStatus;\n createdBy?: string;\n };\n sort?: string[];\n limit?: number;\n after?: string | null;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport type ImportExportTaskStorageOperationsListSubTaskResponse = [\n ImportExportTask[],\n MetaResponse\n];\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsCreateSubTaskParams {\n input: Record<string, any>;\n subTask: ImportExportTask;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsUpdateSubTaskParams {\n input: Record<string, any>;\n original: ImportExportTask;\n subTask: ImportExportTask;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperationsUpdateTaskStatsParams {\n input: {\n prevStatus: ImportExportTaskStatus;\n nextStatus: ImportExportTaskStatus;\n };\n original: ImportExportTask;\n}\n\n/**\n * @category StorageOperations\n * @category ImportExportTaskStorageOperations\n */\nexport interface ImportExportTaskStorageOperations {\n /**\n * Get a single import export task item by given params.\n */\n getTask(params: ImportExportTaskStorageOperationsGetParams): Promise<ImportExportTask | null>;\n\n /**\n * Get all import export tasks by given params.\n */\n listTasks(\n params: ImportExportTaskStorageOperationsListParams\n ): Promise<ImportExportTaskStorageOperationsListResponse>;\n\n createTask(params: ImportExportTaskStorageOperationsCreateParams): Promise<ImportExportTask>;\n\n updateTask(params: ImportExportTaskStorageOperationsUpdateParams): Promise<ImportExportTask>;\n\n deleteTask(params: ImportExportTaskStorageOperationsDeleteParams): Promise<ImportExportTask>;\n\n updateTaskStats(\n params: ImportExportTaskStorageOperationsUpdateTaskStatsParams\n ): Promise<ImportExportTask>;\n\n /**\n * Get a single import export sub-task item by given params.\n */\n getSubTask(\n params: ImportExportTaskStorageOperationsGetSubTaskParams\n ): Promise<ImportExportTask | null>;\n\n /**\n * Get all import export sub-tasks by given params.\n */\n listSubTasks(\n params: ImportExportTaskStorageOperationsListSubTaskParams\n ): Promise<ImportExportTaskStorageOperationsListSubTaskResponse>;\n\n createSubTask(\n params: ImportExportTaskStorageOperationsCreateSubTaskParams\n ): Promise<ImportExportTask>;\n\n updateSubTask(\n params: ImportExportTaskStorageOperationsUpdateSubTaskParams\n ): Promise<ImportExportTask>;\n}\n\nexport interface FileUploadsData {\n /**\n * Location of export data file. Export data contains the relevant entity data (block, page, template), and an\n * array of file objects, exported from the DB, that need to be imported.\n *\n * Example:\n * 'IMPORTS/8lf6y7xp5/8lf6x9v68-header-1/8lf6x9v69-header-1/Header #1.json'\n */\n data: string;\n /**\n * Example:\n * '8ldspraka-9l9iaffak-1.jpeg': 'IMPORTS/8lf6y7xp5/8lf6x9v68-header-1/assets/8ldspraka-9l9iaffak-1.jpeg',\n * '8ldwyq8ao-pb-editor-page-element-rzfKWtdTWN.png': 'IMPORTS/8lf6y7xp5/8lf6x9v69-header-1/assets/8ldwyq8ao-pb-editor-page-element-rzfKWtdTWN.png'\n */\n assets: Record<string, string>;\n}\n\nexport interface ImportData {\n assets: Record<string, string>;\n data: string;\n key: string;\n}\n"],"mappings":";;;;;;;;;;AAAA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AAEA;AAAA,IACYA,kBAAkB;AAAA;AAAA,WAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;AAAA,GAAlBA,kBAAkB,kCAAlBA,kBAAkB;AAAA,IAKlBC,sBAAsB;AAAA;AAAA,WAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;AAAA,GAAtBA,sBAAsB,sCAAtBA,sBAAsB"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["blocksHandler","configuration","payload","context","log","console","subTask","noPendingTask","prevStatusOfSubTask","ImportExportTaskStatus","PENDING","pageBuilder","taskId","subTaskIndex","type","identity","mockSecurity","importExportTask","getSubTask","zeroPad","status","data","error","id","blockKey","category","zipFileKey","input","fileUploadsData","updateSubTask","PROCESSING","updateStats","prevStatus","nextStatus","block","importBlock","key","pbBlock","createPageBlock","name","blockCategory","content","preview","COMPLETED","message","e","FAILED","code","updateTask","invokeHandlerClient","handlers","process","security","getIdentity","description"],"sources":["blocksHandler.ts"],"sourcesContent":["import { ImportExportTaskStatus, PbImportExportContext } from \"~/types\";\nimport { importBlock } from \"~/import/utils\";\nimport { invokeHandlerClient } from \"~/client\";\nimport { mockSecurity } from \"~/mockSecurity\";\nimport { zeroPad } from \"@webiny/utils\";\nimport { Configuration, Payload, Response } from \"~/import/process\";\n\nexport const blocksHandler = async (\n configuration: Configuration,\n payload: Payload,\n context: PbImportExportContext\n): Promise<Response> => {\n const log = console.log;\n let subTask;\n let noPendingTask = true;\n let prevStatusOfSubTask = ImportExportTaskStatus.PENDING;\n\n log(\"RUNNING Import Block Queue Process\");\n const { pageBuilder } = context;\n const { taskId, subTaskIndex, type, identity } = payload;\n // Disable authorization; this is necessary because we call Page Builder CRUD methods which include authorization checks\n // and this Lambda is invoked internally, without credentials.\n mockSecurity(identity, context);\n\n try {\n /*\n * Note: We're not going to DB for getting next sub-task to process,\n * because the data might be out of sync due to GSI eventual consistency.\n */\n\n subTask = await pageBuilder.importExportTask.getSubTask(taskId, zeroPad(subTaskIndex, 5));\n\n /**\n * Base condition!!\n * Bail out early, if task not found or task's status is not \"pending\".\n */\n if (!subTask || subTask.status !== ImportExportTaskStatus.PENDING) {\n noPendingTask = true;\n return {\n data: \"\",\n error: null\n };\n } else {\n noPendingTask = false;\n }\n prevStatusOfSubTask = subTask.status;\n\n log(`Fetched sub task => ${subTask.id}`);\n console.log(\"subTask\", subTask);\n\n const { blockKey, category, zipFileKey, input } = subTask.data;\n const { fileUploadsData } = input;\n\n log(`Processing block key \"${blockKey}\"`);\n\n // Mark task status as PROCESSING\n subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.PROCESSING\n });\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.PROCESSING\n });\n prevStatusOfSubTask = subTask.status;\n\n // Real job\n const block = await importBlock({\n context,\n blockKey,\n key: zipFileKey,\n fileUploadsData\n });\n\n // Create a block\n const pbBlock = await context.pageBuilder.createPageBlock({\n name: block.name,\n blockCategory: category,\n content: block.content,\n preview: block.preview\n });\n\n // Update task record in DB\n subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.COMPLETED,\n data: {\n message: \"Done\",\n block: {\n id: pbBlock.id,\n name: pbBlock.name\n }\n }\n });\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.COMPLETED\n });\n prevStatusOfSubTask = subTask.status;\n } catch (e) {\n log(\"[IMPORT_BLOCKS_PROCESS] Error => \", e.message);\n\n if (subTask && subTask.id) {\n /**\n * In case of error, we'll update the task status to \"failed\",\n * so that, client can show notify the user appropriately.\n */\n subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.FAILED,\n error: {\n name: e.name,\n message: e.message,\n code: \"IMPORT_FAILED\"\n }\n });\n\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.FAILED\n });\n prevStatusOfSubTask = subTask.status;\n }\n\n return {\n data: null,\n error: {\n message: e.message\n }\n };\n } finally {\n // Base condition!\n if (noPendingTask) {\n log(`No pending sub-task for task ${taskId}`);\n\n await pageBuilder.importExportTask.updateTask(taskId, {\n status: ImportExportTaskStatus.COMPLETED,\n data: {\n message: `Finish importing blocks.`\n }\n });\n } else {\n log(`Invoking PROCESS for task \"${subTaskIndex + 1}\"`);\n // We want to continue with Self invocation no matter if current block error out.\n await invokeHandlerClient<Payload>({\n context,\n name: configuration.handlers.process,\n payload: {\n taskId,\n subTaskIndex: subTaskIndex + 1,\n type,\n identity: context.security.getIdentity()\n },\n description: \"Import blocks - process - subtask\"\n });\n }\n }\n return {\n data: \"\",\n error: null\n };\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["pagesHandler","configuration","payload","context","log","console","subTask","noPendingTask","prevStatusOfSubTask","ImportExportTaskStatus","PENDING","pageBuilder","taskId","subTaskIndex","type","identity","mockSecurity","importExportTask","getSubTask","zeroPad","status","data","error","id","pageKey","category","zipFileKey","input","meta","fileUploadsData","updateSubTask","PROCESSING","updateStats","prevStatus","nextStatus","page","importPage","key","pbPage","createPage","updatePage","content","title","path","settings","COMPLETED","message","version","e","FAILED","name","stack","code","updateTask","invokeHandlerClient","handlers","process","security","getIdentity","description"],"sources":["pagesHandler.ts"],"sourcesContent":["import { ImportExportTaskStatus, PbImportExportContext } from \"~/types\";\nimport { importPage } from \"~/import/utils\";\nimport { invokeHandlerClient } from \"~/client\";\nimport { mockSecurity } from \"~/mockSecurity\";\nimport { zeroPad } from \"@webiny/utils\";\nimport { Configuration, Payload, Response } from \"~/import/process\";\n\nexport const pagesHandler = async (\n configuration: Configuration,\n payload: Payload,\n context: PbImportExportContext\n): Promise<Response> => {\n const log = console.log;\n let subTask;\n let noPendingTask = true;\n let prevStatusOfSubTask = ImportExportTaskStatus.PENDING;\n\n log(\"RUNNING Import Page Queue Process\");\n const { pageBuilder } = context;\n const { taskId, subTaskIndex, type, identity } = payload;\n // Disable authorization; this is necessary because we call Page Builder CRUD methods which include authorization checks\n // and this Lambda is invoked internally, without credentials.\n mockSecurity(identity, context);\n\n try {\n /*\n * Note: We're not going to DB for getting next sub-task to process,\n * because the data might be out of sync due to GSI eventual consistency.\n */\n\n subTask = await pageBuilder.importExportTask.getSubTask(taskId, zeroPad(subTaskIndex, 5));\n\n /**\n * Base condition!!\n * Bail out early, if task not found or task's status is not \"pending\".\n */\n if (!subTask || subTask.status !== ImportExportTaskStatus.PENDING) {\n noPendingTask = true;\n return {\n data: \"\",\n error: null\n };\n } else {\n noPendingTask = false;\n }\n prevStatusOfSubTask = subTask.status;\n\n log(`Fetched sub task => ${subTask.id}`);\n\n const { pageKey, category, zipFileKey, input, meta } = subTask.data;\n const { fileUploadsData } = input;\n\n log(`Processing page key \"${pageKey}\"`);\n\n // Mark task status as PROCESSING\n subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.PROCESSING\n });\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.PROCESSING\n });\n prevStatusOfSubTask = subTask.status;\n\n // Real job\n const page = await importPage({\n context,\n pageKey,\n key: zipFileKey,\n fileUploadsData\n });\n\n // Create a page\n let pbPage = await context.pageBuilder.createPage(category, meta);\n\n // Update page with data\n pbPage = await context.pageBuilder.updatePage(pbPage.id, {\n content: page.content,\n title: page.title,\n path: page.path,\n settings: page.settings\n });\n\n // TODO: Publish page\n\n // Update task record in DB\n subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.COMPLETED,\n data: {\n message: \"Done\",\n page: {\n id: pbPage.id,\n title: pbPage.title,\n version: pbPage.version,\n status: pbPage.status\n }\n }\n });\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.COMPLETED\n });\n prevStatusOfSubTask = subTask.status;\n } catch (e) {\n log(\"[IMPORT_PAGES_PROCESS] Error => \", e);\n\n if (subTask && subTask.id) {\n /**\n * In case of error, we'll update the task status to \"failed\",\n * so that, client can show notify the user appropriately.\n */\n subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.FAILED,\n error: {\n name: e.name,\n message: e.message,\n stack: e.stack,\n code: \"IMPORT_FAILED\"\n }\n });\n\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.FAILED\n });\n prevStatusOfSubTask = subTask.status;\n }\n\n return {\n data: null,\n error: {\n message: e.message\n }\n };\n } finally {\n // Base condition!\n if (noPendingTask) {\n log(`No pending sub-task for task ${taskId}`);\n\n await pageBuilder.importExportTask.updateTask(taskId, {\n status: ImportExportTaskStatus.COMPLETED,\n data: {\n message: `Finish importing pages.`\n }\n });\n } else {\n log(`Invoking PROCESS for task \"${subTaskIndex + 1}\"`);\n // We want to continue with Self invocation no matter if current page error out.\n await invokeHandlerClient<Payload>({\n context,\n name: configuration.handlers.process,\n payload: {\n taskId,\n subTaskIndex: subTaskIndex + 1,\n type,\n identity: context.security.getIdentity()\n },\n description: \"Import pages - process - subtask\"\n });\n }\n }\n return {\n data: \"\",\n error: null\n };\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AAGO,MAAMA,YAAY,GAAG,OACxBC,aAA4B,EAC5BC,OAAgB,EAChBC,OAA8B,KACV;EACpB,MAAMC,GAAG,GAAGC,OAAO,CAACD,GAAG;EACvB,IAAIE,OAAO;EACX,IAAIC,aAAa,GAAG,IAAI;EACxB,IAAIC,mBAAmB,GAAGC,6BAAsB,CAACC,OAAO;EAExDN,GAAG,CAAC,mCAAmC,CAAC;EACxC,MAAM;IAAEO;EAAY,CAAC,GAAGR,OAAO;EAC/B,MAAM;IAAES,MAAM;IAAEC,YAAY;IAAEC,IAAI;IAAEC;EAAS,CAAC,GAAGb,OAAO;EACxD;EACA;EACA,IAAAc,0BAAY,EAACD,QAAQ,EAAEZ,OAAO,CAAC;EAE/B,IAAI;IACA;AACR;AACA;AACA;;IAEQG,OAAO,GAAG,MAAMK,WAAW,CAACM,gBAAgB,CAACC,UAAU,CAACN,MAAM,EAAE,IAAAO,eAAO,EAACN,YAAY,EAAE,CAAC,CAAC,CAAC;;IAEzF;AACR;AACA;AACA;IACQ,IAAI,CAACP,OAAO,IAAIA,OAAO,CAACc,MAAM,KAAKX,6BAAsB,CAACC,OAAO,EAAE;MAC/DH,aAAa,GAAG,IAAI;MACpB,OAAO;QACHc,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACX,CAAC;IACL,CAAC,MAAM;MACHf,aAAa,GAAG,KAAK;IACzB;IACAC,mBAAmB,GAAGF,OAAO,CAACc,MAAM;IAEpChB,GAAG,CAAE,uBAAsBE,OAAO,CAACiB,EAAG,EAAC,CAAC;IAExC,MAAM;MAAEC,OAAO;MAAEC,QAAQ;MAAEC,UAAU;MAAEC,KAAK;MAAEC;IAAK,CAAC,GAAGtB,OAAO,CAACe,IAAI;IACnE,MAAM;MAAEQ;IAAgB,CAAC,GAAGF,KAAK;IAEjCvB,GAAG,CAAE,wBAAuBoB,OAAQ,GAAE,CAAC;;IAEvC;IACAlB,OAAO,GAAG,MAAMK,WAAW,CAACM,gBAAgB,CAACa,aAAa,CAAClB,MAAM,EAAEN,OAAO,CAACiB,EAAE,EAAE;MAC3EH,MAAM,EAAEX,6BAAsB,CAACsB;IACnC,CAAC,CAAC;IACF;IACA,MAAMpB,WAAW,CAACM,gBAAgB,CAACe,WAAW,CAACpB,MAAM,EAAE;MACnDqB,UAAU,EAAEzB,mBAAmB;MAC/B0B,UAAU,EAAEzB,6BAAsB,CAACsB;IACvC,CAAC,CAAC;IACFvB,mBAAmB,GAAGF,OAAO,CAACc,MAAM;;IAEpC;IACA,MAAMe,IAAI,GAAG,MAAM,IAAAC,iBAAU,EAAC;MAC1BjC,OAAO;MACPqB,OAAO;MACPa,GAAG,EAAEX,UAAU;MACfG;IACJ,CAAC,CAAC;;IAEF;IACA,IAAIS,MAAM,GAAG,MAAMnC,OAAO,CAACQ,WAAW,CAAC4B,UAAU,CAACd,QAAQ,EAAEG,IAAI,CAAC;;IAEjE;IACAU,MAAM,GAAG,MAAMnC,OAAO,CAACQ,WAAW,CAAC6B,UAAU,CAACF,MAAM,CAACf,EAAE,EAAE;MACrDkB,OAAO,EAAEN,IAAI,CAACM,OAAO;MACrBC,KAAK,EAAEP,IAAI,CAACO,KAAK;MACjBC,IAAI,EAAER,IAAI,CAACQ,IAAI;MACfC,QAAQ,EAAET,IAAI,CAACS;IACnB,CAAC,CAAC;;IAEF;;IAEA;IACAtC,OAAO,GAAG,MAAMK,WAAW,CAACM,gBAAgB,CAACa,aAAa,CAAClB,MAAM,EAAEN,OAAO,CAACiB,EAAE,EAAE;MAC3EH,MAAM,EAAEX,6BAAsB,CAACoC,SAAS;MACxCxB,IAAI,EAAE;QACFyB,OAAO,EAAE,MAAM;QACfX,IAAI,EAAE;UACFZ,EAAE,EAAEe,MAAM,CAACf,EAAE;UACbmB,KAAK,EAAEJ,MAAM,CAACI,KAAK;UACnBK,OAAO,EAAET,MAAM,CAACS,OAAO;UACvB3B,MAAM,EAAEkB,MAAM,CAAClB;QACnB;MACJ;IACJ,CAAC,CAAC;IACF;IACA,MAAMT,WAAW,CAACM,gBAAgB,CAACe,WAAW,CAACpB,MAAM,EAAE;MACnDqB,UAAU,EAAEzB,mBAAmB;MAC/B0B,UAAU,EAAEzB,6BAAsB,CAACoC;IACvC,CAAC,CAAC;IACFrC,mBAAmB,GAAGF,OAAO,CAACc,MAAM;EACxC,CAAC,CAAC,OAAO4B,CAAC,EAAE;IACR5C,GAAG,CAAC,kCAAkC,EAAE4C,CAAC,CAAC;IAE1C,IAAI1C,OAAO,IAAIA,OAAO,CAACiB,EAAE,EAAE;MACvB;AACZ;AACA;AACA;MACYjB,OAAO,GAAG,MAAMK,WAAW,CAACM,gBAAgB,CAACa,aAAa,CAAClB,MAAM,EAAEN,OAAO,CAACiB,EAAE,EAAE;QAC3EH,MAAM,EAAEX,6BAAsB,CAACwC,MAAM;QACrC3B,KAAK,EAAE;UACH4B,IAAI,EAAEF,CAAC,CAACE,IAAI;UACZJ,OAAO,EAAEE,CAAC,CAACF,OAAO;UAClBK,KAAK,EAAEH,CAAC,CAACG,KAAK;UACdC,IAAI,EAAE;QACV;MACJ,CAAC,CAAC;;MAEF;MACA,MAAMzC,WAAW,CAACM,gBAAgB,CAACe,WAAW,CAACpB,MAAM,EAAE;QACnDqB,UAAU,EAAEzB,mBAAmB;QAC/B0B,UAAU,EAAEzB,6BAAsB,CAACwC;MACvC,CAAC,CAAC;MACFzC,mBAAmB,GAAGF,OAAO,CAACc,MAAM;IACxC;IAEA,OAAO;MACHC,IAAI,EAAE,IAAI;MACVC,KAAK,EAAE;QACHwB,OAAO,EAAEE,CAAC,CAACF;MACf;IACJ,CAAC;EACL,CAAC,SAAS;IACN;IACA,IAAIvC,aAAa,EAAE;MACfH,GAAG,CAAE,gCAA+BQ,MAAO,EAAC,CAAC;MAE7C,MAAMD,WAAW,CAACM,gBAAgB,CAACoC,UAAU,CAACzC,MAAM,EAAE;QAClDQ,MAAM,EAAEX,6BAAsB,CAACoC,SAAS;QACxCxB,IAAI,EAAE;UACFyB,OAAO,EAAG;QACd;MACJ,CAAC,CAAC;IACN,CAAC,MAAM;MACH1C,GAAG,CAAE,8BAA6BS,YAAY,GAAG,CAAE,GAAE,CAAC;MACtD;MACA,MAAM,IAAAyC,2BAAmB,EAAU;QAC/BnD,OAAO;QACP+C,IAAI,EAAEjD,aAAa,CAACsD,QAAQ,CAACC,OAAO;QACpCtD,OAAO,EAAE;UACLU,MAAM;UACNC,YAAY,EAAEA,YAAY,GAAG,CAAC;UAC9BC,IAAI;UACJC,QAAQ,EAAEZ,OAAO,CAACsD,QAAQ,CAACC,WAAW;QAC1C,CAAC;QACDC,WAAW,EAAE;MACjB,CAAC,CAAC;IACN;EACJ;EACA,OAAO;IACHtC,IAAI,EAAE,EAAE;IACRC,KAAK,EAAE;EACX,CAAC;AACL,CAAC;AAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["templatesHandler","configuration","payload","context","log","console","subTask","noPendingTask","prevStatusOfSubTask","ImportExportTaskStatus","PENDING","pageBuilder","taskId","subTaskIndex","type","identity","mockSecurity","importExportTask","getSubTask","zeroPad","status","data","error","id","templateKey","zipFileKey","input","fileUploadsData","updateSubTask","PROCESSING","updateStats","prevStatus","nextStatus","template","importTemplate","key","pbTemplate","createPageTemplate","title","slug","tags","layout","description","content","COMPLETED","message","e","FAILED","name","code","updateTask","invokeHandlerClient","handlers","process","security","getIdentity"],"sources":["templatesHandler.ts"],"sourcesContent":["import { ImportExportTaskStatus, PbImportExportContext } from \"~/types\";\nimport { importTemplate } from \"~/import/utils\";\nimport { invokeHandlerClient } from \"~/client\";\nimport { mockSecurity } from \"~/mockSecurity\";\nimport { zeroPad } from \"@webiny/utils\";\nimport { Configuration, Payload, Response } from \"~/import/process\";\n\nexport const templatesHandler = async (\n configuration: Configuration,\n payload: Payload,\n context: PbImportExportContext\n): Promise<Response> => {\n const log = console.log;\n let subTask;\n let noPendingTask = true;\n let prevStatusOfSubTask = ImportExportTaskStatus.PENDING;\n\n log(\"RUNNING Import Template Queue Process\");\n const { pageBuilder } = context;\n const { taskId, subTaskIndex, type, identity } = payload;\n // Disable authorization; this is necessary because we call Page Builder CRUD methods which include authorization checks\n // and this Lambda is invoked internally, without credentials.\n mockSecurity(identity, context);\n\n try {\n /*\n * Note: We're not going to DB for getting next sub-task to process,\n * because the data might be out of sync due to GSI eventual consistency.\n */\n\n subTask = await pageBuilder.importExportTask.getSubTask(taskId, zeroPad(subTaskIndex, 5));\n\n /**\n * Base condition!!\n * Bail out early, if task not found or task's status is not \"pending\".\n */\n if (!subTask || subTask.status !== ImportExportTaskStatus.PENDING) {\n noPendingTask = true;\n return {\n data: \"\",\n error: null\n };\n } else {\n noPendingTask = false;\n }\n prevStatusOfSubTask = subTask.status;\n\n log(`Fetched sub task => ${subTask.id}`);\n\n const { templateKey, zipFileKey, input } = subTask.data;\n const { fileUploadsData } = input;\n\n log(`Processing template key \"${templateKey}\"`);\n\n // Mark task status as PROCESSING\n subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.PROCESSING\n });\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.PROCESSING\n });\n prevStatusOfSubTask = subTask.status;\n\n // Real job\n const template = await importTemplate({\n context,\n templateKey,\n key: zipFileKey,\n fileUploadsData\n });\n\n // Create a template\n const pbTemplate = await context.pageBuilder.createPageTemplate({\n title: template.title,\n slug: template.slug,\n tags: template.tags,\n layout: template.layout,\n description: template.description,\n content: template.content\n });\n\n // Update task record in DB\n subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.COMPLETED,\n data: {\n message: \"Done\",\n template: {\n id: pbTemplate.id,\n title: pbTemplate.title\n }\n }\n });\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.COMPLETED\n });\n prevStatusOfSubTask = subTask.status;\n } catch (e) {\n log(\"[IMPORT_TEMPLATES_PROCESS] Error => \", e.message);\n\n if (subTask && subTask.id) {\n /**\n * In case of error, we'll update the task status to \"failed\",\n * so that, client can show notify the user appropriately.\n */\n subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.FAILED,\n error: {\n name: e.name,\n message: e.message,\n code: \"IMPORT_FAILED\"\n }\n });\n\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.FAILED\n });\n prevStatusOfSubTask = subTask.status;\n }\n\n return {\n data: null,\n error: {\n message: e.message\n }\n };\n } finally {\n // Base condition!\n if (noPendingTask) {\n log(`No pending sub-task for task ${taskId}`);\n\n await pageBuilder.importExportTask.updateTask(taskId, {\n status: ImportExportTaskStatus.COMPLETED,\n data: {\n message: `Finish importing templates.`\n }\n });\n } else {\n log(`Invoking PROCESS for task \"${subTaskIndex + 1}\"`);\n // We want to continue with Self invocation no matter if current template error out.\n await invokeHandlerClient<Payload>({\n context,\n name: configuration.handlers.process,\n payload: {\n taskId,\n subTaskIndex: subTaskIndex + 1,\n type,\n identity: context.security.getIdentity()\n },\n description: \"Import templates - process - subtask\"\n });\n }\n }\n return {\n data: \"\",\n error: null\n };\n};\n"],"mappings":"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"}
package/import/utils.d.ts DELETED
@@ -1,56 +0,0 @@
1
- import { File } from "@webiny/api-file-manager/types";
2
- import { PbImportExportContext } from "../graphql/types";
3
- import { ExportedPageData, ExportedBlockData, ExportedTemplateData } from "../export/utils";
4
- interface UploadAssetsParams {
5
- context: PbImportExportContext;
6
- filesData: File[];
7
- fileUploadsData: FileUploadsData;
8
- }
9
- interface UploadAssetsReturnType {
10
- fileIdToKeyMap: Map<string, string>;
11
- }
12
- export declare const uploadAssets: (params: UploadAssetsParams) => Promise<UploadAssetsReturnType>;
13
- interface FileUploadsData {
14
- data: string;
15
- assets: Record<string, string>;
16
- }
17
- interface ImportPageParams {
18
- key: string;
19
- pageKey: string;
20
- context: PbImportExportContext;
21
- fileUploadsData: FileUploadsData;
22
- }
23
- export declare function importPage({ pageKey, context, fileUploadsData }: ImportPageParams): Promise<ExportedPageData["page"]>;
24
- interface ImportBlockParams {
25
- key: string;
26
- blockKey: string;
27
- context: PbImportExportContext;
28
- fileUploadsData: FileUploadsData;
29
- }
30
- export declare function importBlock({ blockKey, context, fileUploadsData }: ImportBlockParams): Promise<ExportedBlockData["block"]>;
31
- interface ImportTemplateParams {
32
- key: string;
33
- templateKey: string;
34
- context: PbImportExportContext;
35
- fileUploadsData: FileUploadsData;
36
- }
37
- export declare function importTemplate({ templateKey, context, fileUploadsData }: ImportTemplateParams): Promise<ExportedTemplateData["template"]>;
38
- interface ImportData {
39
- assets: Record<string, string>;
40
- data: string;
41
- key: string;
42
- }
43
- /**
44
- * Function will read the given zip file from S3 via stream, extract its content and upload it to S3 bucket.
45
- * @param zipFileUrl
46
- * @return ImportData S3 file keys for all uploaded assets group by page/block.
47
- */
48
- export declare function readExtractAndUploadZipFileContents(zipFileUrl: string): Promise<ImportData[]>;
49
- export declare function initialStats(total: number): {
50
- pending: number;
51
- processing: number;
52
- completed: number;
53
- failed: number;
54
- total: number;
55
- };
56
- export {};