@webiny/api-page-builder-import-export 5.41.0-dbt.0 → 5.41.1-beta.0

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.
@@ -53,7 +53,7 @@ class ExportPagesCleanup {
53
53
  collection.push(...results);
54
54
  return collection;
55
55
  }, []);
56
- const s3 = (0, _clientS.createS3Client)({
56
+ const s3 = (0, _clientS.createS3)({
57
57
  region: process.env.AWS_REGION
58
58
  });
59
59
  const parentKey = parent.output?.key;
@@ -1 +1 @@
1
- {"version":3,"names":["_types","require","_clientS","_chunk","_interopRequireDefault","ExportPagesCleanup","execute","params","context","response","store","task","getTask","parentId","error","id","parent","tasks","items","subTasks","listTasks","where","definitionId","PageExportTask","ZipPages","limit","length","done","files","reduce","collection","subTask","output","results","Object","values","filter","Boolean","push","s3","createS3Client","region","process","env","AWS_REGION","parentKey","key","deleteObject","Bucket","S3_BUCKET","Key","chunks","lodashChunk","chunk","deleteObjects","Delete","Objects","map","exports"],"sources":["ExportPagesCleanup.ts"],"sourcesContent":["import {\n IExportPagesCleanupTaskParams,\n IExportPagesControllerOutput,\n IExportPagesZipPagesOutput,\n PageExportTask\n} from \"~/export/pages/types\";\nimport { ITaskResponseResult } from \"@webiny/tasks\";\nimport { createS3Client } from \"@webiny/aws-sdk/client-s3\";\nimport lodashChunk from \"lodash/chunk\";\n\nexport class ExportPagesCleanup {\n public async execute(params: IExportPagesCleanupTaskParams): Promise<ITaskResponseResult> {\n const { context, response, store } = params;\n /**\n * This task must have a parent one. If it does not, just end with error.\n * This should not happen as we trigger this task from a parent one, not directly.\n *\n * But let's just make sure.\n */\n const task = store.getTask();\n if (!task.parentId) {\n return response.error(`Missing task \"${task.id}\" parent id.`);\n }\n\n const parent = await context.tasks.getTask<IExportPagesControllerOutput>(task.parentId);\n if (!parent) {\n return response.error(`Missing parent task \"${task.parentId}\" in the database.`);\n }\n /**\n * We need to find all the tasks that created zip files, so we can have a list of files to delete.\n */\n const { items: subTasks } = await context.tasks.listTasks<any, IExportPagesZipPagesOutput>({\n where: {\n parentId: parent.id,\n definitionId: PageExportTask.ZipPages\n },\n limit: 10000\n });\n if (subTasks.length === 0) {\n return response.done(\"No subtasks found - nothing to cleanup.\");\n }\n\n const files = subTasks.reduce<string[]>((collection, subTask) => {\n const done = subTask.output?.done;\n if (!done) {\n return collection;\n }\n const results = Object.values(done).filter(Boolean);\n collection.push(...results);\n return collection;\n }, []);\n\n const s3 = createS3Client({\n region: process.env.AWS_REGION\n });\n\n const parentKey = parent.output?.key;\n if (typeof parentKey === \"string\") {\n await s3.deleteObject({\n Bucket: process.env.S3_BUCKET,\n Key: parentKey\n });\n }\n\n const chunks = lodashChunk(files, 500);\n\n for (const chunk of chunks) {\n await s3.deleteObjects({\n Bucket: process.env.S3_BUCKET,\n Delete: {\n Objects: chunk.map(Key => ({ Key }))\n }\n });\n }\n\n return response.done(\"Done with cleanup!\");\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAOA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEO,MAAMI,kBAAkB,CAAC;EAC5B,MAAaC,OAAOA,CAACC,MAAqC,EAAgC;IACtF,MAAM;MAAEC,OAAO;MAAEC,QAAQ;MAAEC;IAAM,CAAC,GAAGH,MAAM;IAC3C;AACR;AACA;AACA;AACA;AACA;IACQ,MAAMI,IAAI,GAAGD,KAAK,CAACE,OAAO,CAAC,CAAC;IAC5B,IAAI,CAACD,IAAI,CAACE,QAAQ,EAAE;MAChB,OAAOJ,QAAQ,CAACK,KAAK,CAAE,iBAAgBH,IAAI,CAACI,EAAG,cAAa,CAAC;IACjE;IAEA,MAAMC,MAAM,GAAG,MAAMR,OAAO,CAACS,KAAK,CAACL,OAAO,CAA+BD,IAAI,CAACE,QAAQ,CAAC;IACvF,IAAI,CAACG,MAAM,EAAE;MACT,OAAOP,QAAQ,CAACK,KAAK,CAAE,wBAAuBH,IAAI,CAACE,QAAS,oBAAmB,CAAC;IACpF;IACA;AACR;AACA;IACQ,MAAM;MAAEK,KAAK,EAAEC;IAAS,CAAC,GAAG,MAAMX,OAAO,CAACS,KAAK,CAACG,SAAS,CAAkC;MACvFC,KAAK,EAAE;QACHR,QAAQ,EAAEG,MAAM,CAACD,EAAE;QACnBO,YAAY,EAAEC,qBAAc,CAACC;MACjC,CAAC;MACDC,KAAK,EAAE;IACX,CAAC,CAAC;IACF,IAAIN,QAAQ,CAACO,MAAM,KAAK,CAAC,EAAE;MACvB,OAAOjB,QAAQ,CAACkB,IAAI,CAAC,yCAAyC,CAAC;IACnE;IAEA,MAAMC,KAAK,GAAGT,QAAQ,CAACU,MAAM,CAAW,CAACC,UAAU,EAAEC,OAAO,KAAK;MAC7D,MAAMJ,IAAI,GAAGI,OAAO,CAACC,MAAM,EAAEL,IAAI;MACjC,IAAI,CAACA,IAAI,EAAE;QACP,OAAOG,UAAU;MACrB;MACA,MAAMG,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACR,IAAI,CAAC,CAACS,MAAM,CAACC,OAAO,CAAC;MACnDP,UAAU,CAACQ,IAAI,CAAC,GAAGL,OAAO,CAAC;MAC3B,OAAOH,UAAU;IACrB,CAAC,EAAE,EAAE,CAAC;IAEN,MAAMS,EAAE,GAAG,IAAAC,uBAAc,EAAC;MACtBC,MAAM,EAAEC,OAAO,CAACC,GAAG,CAACC;IACxB,CAAC,CAAC;IAEF,MAAMC,SAAS,GAAG7B,MAAM,CAACgB,MAAM,EAAEc,GAAG;IACpC,IAAI,OAAOD,SAAS,KAAK,QAAQ,EAAE;MAC/B,MAAMN,EAAE,CAACQ,YAAY,CAAC;QAClBC,MAAM,EAAEN,OAAO,CAACC,GAAG,CAACM,SAAS;QAC7BC,GAAG,EAAEL;MACT,CAAC,CAAC;IACN;IAEA,MAAMM,MAAM,GAAG,IAAAC,cAAW,EAACxB,KAAK,EAAE,GAAG,CAAC;IAEtC,KAAK,MAAMyB,KAAK,IAAIF,MAAM,EAAE;MACxB,MAAMZ,EAAE,CAACe,aAAa,CAAC;QACnBN,MAAM,EAAEN,OAAO,CAACC,GAAG,CAACM,SAAS;QAC7BM,MAAM,EAAE;UACJC,OAAO,EAAEH,KAAK,CAACI,GAAG,CAACP,GAAG,KAAK;YAAEA;UAAI,CAAC,CAAC;QACvC;MACJ,CAAC,CAAC;IACN;IAEA,OAAOzC,QAAQ,CAACkB,IAAI,CAAC,oBAAoB,CAAC;EAC9C;AACJ;AAAC+B,OAAA,CAAArD,kBAAA,GAAAA,kBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_types","require","_clientS","_chunk","_interopRequireDefault","ExportPagesCleanup","execute","params","context","response","store","task","getTask","parentId","error","id","parent","tasks","items","subTasks","listTasks","where","definitionId","PageExportTask","ZipPages","limit","length","done","files","reduce","collection","subTask","output","results","Object","values","filter","Boolean","push","s3","createS3","region","process","env","AWS_REGION","parentKey","key","deleteObject","Bucket","S3_BUCKET","Key","chunks","lodashChunk","chunk","deleteObjects","Delete","Objects","map","exports"],"sources":["ExportPagesCleanup.ts"],"sourcesContent":["import {\n IExportPagesCleanupTaskParams,\n IExportPagesControllerOutput,\n IExportPagesZipPagesOutput,\n PageExportTask\n} from \"~/export/pages/types\";\nimport { ITaskResponseResult } from \"@webiny/tasks\";\nimport { createS3 } from \"@webiny/aws-sdk/client-s3\";\nimport lodashChunk from \"lodash/chunk\";\n\nexport class ExportPagesCleanup {\n public async execute(params: IExportPagesCleanupTaskParams): Promise<ITaskResponseResult> {\n const { context, response, store } = params;\n /**\n * This task must have a parent one. If it does not, just end with error.\n * This should not happen as we trigger this task from a parent one, not directly.\n *\n * But let's just make sure.\n */\n const task = store.getTask();\n if (!task.parentId) {\n return response.error(`Missing task \"${task.id}\" parent id.`);\n }\n\n const parent = await context.tasks.getTask<IExportPagesControllerOutput>(task.parentId);\n if (!parent) {\n return response.error(`Missing parent task \"${task.parentId}\" in the database.`);\n }\n /**\n * We need to find all the tasks that created zip files, so we can have a list of files to delete.\n */\n const { items: subTasks } = await context.tasks.listTasks<any, IExportPagesZipPagesOutput>({\n where: {\n parentId: parent.id,\n definitionId: PageExportTask.ZipPages\n },\n limit: 10000\n });\n if (subTasks.length === 0) {\n return response.done(\"No subtasks found - nothing to cleanup.\");\n }\n\n const files = subTasks.reduce<string[]>((collection, subTask) => {\n const done = subTask.output?.done;\n if (!done) {\n return collection;\n }\n const results = Object.values(done).filter(Boolean);\n collection.push(...results);\n return collection;\n }, []);\n\n const s3 = createS3({\n region: process.env.AWS_REGION\n });\n\n const parentKey = parent.output?.key;\n if (typeof parentKey === \"string\") {\n await s3.deleteObject({\n Bucket: process.env.S3_BUCKET,\n Key: parentKey\n });\n }\n\n const chunks = lodashChunk(files, 500);\n\n for (const chunk of chunks) {\n await s3.deleteObjects({\n Bucket: process.env.S3_BUCKET,\n Delete: {\n Objects: chunk.map(Key => ({ Key }))\n }\n });\n }\n\n return response.done(\"Done with cleanup!\");\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAOA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEO,MAAMI,kBAAkB,CAAC;EAC5B,MAAaC,OAAOA,CAACC,MAAqC,EAAgC;IACtF,MAAM;MAAEC,OAAO;MAAEC,QAAQ;MAAEC;IAAM,CAAC,GAAGH,MAAM;IAC3C;AACR;AACA;AACA;AACA;AACA;IACQ,MAAMI,IAAI,GAAGD,KAAK,CAACE,OAAO,CAAC,CAAC;IAC5B,IAAI,CAACD,IAAI,CAACE,QAAQ,EAAE;MAChB,OAAOJ,QAAQ,CAACK,KAAK,CAAE,iBAAgBH,IAAI,CAACI,EAAG,cAAa,CAAC;IACjE;IAEA,MAAMC,MAAM,GAAG,MAAMR,OAAO,CAACS,KAAK,CAACL,OAAO,CAA+BD,IAAI,CAACE,QAAQ,CAAC;IACvF,IAAI,CAACG,MAAM,EAAE;MACT,OAAOP,QAAQ,CAACK,KAAK,CAAE,wBAAuBH,IAAI,CAACE,QAAS,oBAAmB,CAAC;IACpF;IACA;AACR;AACA;IACQ,MAAM;MAAEK,KAAK,EAAEC;IAAS,CAAC,GAAG,MAAMX,OAAO,CAACS,KAAK,CAACG,SAAS,CAAkC;MACvFC,KAAK,EAAE;QACHR,QAAQ,EAAEG,MAAM,CAACD,EAAE;QACnBO,YAAY,EAAEC,qBAAc,CAACC;MACjC,CAAC;MACDC,KAAK,EAAE;IACX,CAAC,CAAC;IACF,IAAIN,QAAQ,CAACO,MAAM,KAAK,CAAC,EAAE;MACvB,OAAOjB,QAAQ,CAACkB,IAAI,CAAC,yCAAyC,CAAC;IACnE;IAEA,MAAMC,KAAK,GAAGT,QAAQ,CAACU,MAAM,CAAW,CAACC,UAAU,EAAEC,OAAO,KAAK;MAC7D,MAAMJ,IAAI,GAAGI,OAAO,CAACC,MAAM,EAAEL,IAAI;MACjC,IAAI,CAACA,IAAI,EAAE;QACP,OAAOG,UAAU;MACrB;MACA,MAAMG,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACR,IAAI,CAAC,CAACS,MAAM,CAACC,OAAO,CAAC;MACnDP,UAAU,CAACQ,IAAI,CAAC,GAAGL,OAAO,CAAC;MAC3B,OAAOH,UAAU;IACrB,CAAC,EAAE,EAAE,CAAC;IAEN,MAAMS,EAAE,GAAG,IAAAC,iBAAQ,EAAC;MAChBC,MAAM,EAAEC,OAAO,CAACC,GAAG,CAACC;IACxB,CAAC,CAAC;IAEF,MAAMC,SAAS,GAAG7B,MAAM,CAACgB,MAAM,EAAEc,GAAG;IACpC,IAAI,OAAOD,SAAS,KAAK,QAAQ,EAAE;MAC/B,MAAMN,EAAE,CAACQ,YAAY,CAAC;QAClBC,MAAM,EAAEN,OAAO,CAACC,GAAG,CAACM,SAAS;QAC7BC,GAAG,EAAEL;MACT,CAAC,CAAC;IACN;IAEA,MAAMM,MAAM,GAAG,IAAAC,cAAW,EAACxB,KAAK,EAAE,GAAG,CAAC;IAEtC,KAAK,MAAMyB,KAAK,IAAIF,MAAM,EAAE;MACxB,MAAMZ,EAAE,CAACe,aAAa,CAAC;QACnBN,MAAM,EAAEN,OAAO,CAACC,GAAG,CAACM,SAAS;QAC7BM,MAAM,EAAE;UACJC,OAAO,EAAEH,KAAK,CAACI,GAAG,CAACP,GAAG,KAAK;YAAEA;UAAI,CAAC,CAAC;QACvC;MACJ,CAAC,CAAC;IACN;IAEA,OAAOzC,QAAQ,CAACkB,IAAI,CAAC,oBAAoB,CAAC;EAC9C;AACJ;AAAC+B,OAAA,CAAArD,kBAAA,GAAAA,kBAAA","ignoreList":[]}
@@ -24,7 +24,8 @@ class PageExporter {
24
24
  const [filesData] = await this.fileManager.listFiles({
25
25
  where: {
26
26
  id_in: fileIds
27
- }
27
+ },
28
+ limit: 10000
28
29
  });
29
30
  imageFilesData.push(...filesData);
30
31
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_get","_interopRequireDefault","require","_zipper","_utils","PageExporter","constructor","fileManager","execute","page","exportPagesDataKey","files","extractFilesFromData","content","pageSettingsImages","get","filter","image","src","fileIds","map","imageFile","id","imageFilesData","length","filesData","listFiles","where","id_in","push","pageData","title","path","version","status","settings","pageDataBuffer","Buffer","from","JSON","stringify","zipper","Zipper","exportInfo","name","dataBuffer","archiveFileKey","process","exports"],"sources":["PageExporter.ts"],"sourcesContent":["import get from \"lodash/get\";\nimport { Page } from \"@webiny/api-page-builder/types\";\nimport { File, FileManagerContext } from \"@webiny/api-file-manager/types\";\nimport Zipper from \"~/export/zipper\";\nimport { extractFilesFromData } from \"~/export/utils\";\n\nexport interface ExportedPageData {\n /**\n * TODO: is it really ok not to export whole page object?\n * What if we add some new properties in the future?\n *\n * Type of the exported page data is now created by removing unnecessary properties from the Page type.\n * This way TS will break if we add new property and forget to handle it in the export/import process.\n */\n page: Omit<\n Page,\n | \"id\"\n | \"pid\"\n | \"tenant\"\n | \"locale\"\n | \"editor\"\n | \"category\"\n | \"createdFrom\"\n | \"createdBy\"\n | \"createdOn\"\n | \"savedOn\"\n | \"publishedOn\"\n | \"locked\"\n | \"ownedBy\"\n | \"webinyVersion\"\n >;\n files: File[];\n}\n\nexport class PageExporter {\n private fileManager: FileManagerContext[\"fileManager\"];\n\n constructor(fileManager: FileManagerContext[\"fileManager\"]) {\n this.fileManager = fileManager;\n }\n\n async execute(page: Page, exportPagesDataKey: string) {\n // Extract all files\n const files = extractFilesFromData(page.content || {});\n // Extract images from page settings\n const pageSettingsImages = [\n get(page, \"settings.general.image\") as unknown as File,\n get(page, \"settings.social.image\") as unknown as File\n ].filter(image => image && image.src);\n\n const fileIds = [...files, ...pageSettingsImages].map(imageFile => imageFile.id);\n // Get file data for all images\n const imageFilesData: File[] = [];\n if (fileIds.length > 0) {\n const [filesData] = await this.fileManager.listFiles({ where: { id_in: fileIds } });\n imageFilesData.push(...filesData);\n }\n\n // Extract the page data in a json file and upload it to S3\n const pageData: ExportedPageData = {\n page: {\n content: page.content,\n title: page.title,\n path: page.path,\n version: page.version,\n status: page.status,\n settings: page.settings\n },\n files: imageFilesData\n };\n const pageDataBuffer = Buffer.from(JSON.stringify(pageData));\n\n const zipper = new Zipper({\n exportInfo: {\n files: imageFilesData,\n name: page.title,\n dataBuffer: pageDataBuffer\n },\n archiveFileKey: exportPagesDataKey\n });\n\n return zipper.process();\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AA8BO,MAAMG,YAAY,CAAC;EAGtBC,WAAWA,CAACC,WAA8C,EAAE;IACxD,IAAI,CAACA,WAAW,GAAGA,WAAW;EAClC;EAEA,MAAMC,OAAOA,CAACC,IAAU,EAAEC,kBAA0B,EAAE;IAClD;IACA,MAAMC,KAAK,GAAG,IAAAC,2BAAoB,EAACH,IAAI,CAACI,OAAO,IAAI,CAAC,CAAC,CAAC;IACtD;IACA,MAAMC,kBAAkB,GAAG,CACvB,IAAAC,YAAG,EAACN,IAAI,EAAE,wBAAwB,CAAC,EACnC,IAAAM,YAAG,EAACN,IAAI,EAAE,uBAAuB,CAAC,CACrC,CAACO,MAAM,CAACC,KAAK,IAAIA,KAAK,IAAIA,KAAK,CAACC,GAAG,CAAC;IAErC,MAAMC,OAAO,GAAG,CAAC,GAAGR,KAAK,EAAE,GAAGG,kBAAkB,CAAC,CAACM,GAAG,CAACC,SAAS,IAAIA,SAAS,CAACC,EAAE,CAAC;IAChF;IACA,MAAMC,cAAsB,GAAG,EAAE;IACjC,IAAIJ,OAAO,CAACK,MAAM,GAAG,CAAC,EAAE;MACpB,MAAM,CAACC,SAAS,CAAC,GAAG,MAAM,IAAI,CAAClB,WAAW,CAACmB,SAAS,CAAC;QAAEC,KAAK,EAAE;UAAEC,KAAK,EAAET;QAAQ;MAAE,CAAC,CAAC;MACnFI,cAAc,CAACM,IAAI,CAAC,GAAGJ,SAAS,CAAC;IACrC;;IAEA;IACA,MAAMK,QAA0B,GAAG;MAC/BrB,IAAI,EAAE;QACFI,OAAO,EAAEJ,IAAI,CAACI,OAAO;QACrBkB,KAAK,EAAEtB,IAAI,CAACsB,KAAK;QACjBC,IAAI,EAAEvB,IAAI,CAACuB,IAAI;QACfC,OAAO,EAAExB,IAAI,CAACwB,OAAO;QACrBC,MAAM,EAAEzB,IAAI,CAACyB,MAAM;QACnBC,QAAQ,EAAE1B,IAAI,CAAC0B;MACnB,CAAC;MACDxB,KAAK,EAAEY;IACX,CAAC;IACD,MAAMa,cAAc,GAAGC,MAAM,CAACC,IAAI,CAACC,IAAI,CAACC,SAAS,CAACV,QAAQ,CAAC,CAAC;IAE5D,MAAMW,MAAM,GAAG,IAAIC,eAAM,CAAC;MACtBC,UAAU,EAAE;QACRhC,KAAK,EAAEY,cAAc;QACrBqB,IAAI,EAAEnC,IAAI,CAACsB,KAAK;QAChBc,UAAU,EAAET;MAChB,CAAC;MACDU,cAAc,EAAEpC;IACpB,CAAC,CAAC;IAEF,OAAO+B,MAAM,CAACM,OAAO,CAAC,CAAC;EAC3B;AACJ;AAACC,OAAA,CAAA3C,YAAA,GAAAA,YAAA","ignoreList":[]}
1
+ {"version":3,"names":["_get","_interopRequireDefault","require","_zipper","_utils","PageExporter","constructor","fileManager","execute","page","exportPagesDataKey","files","extractFilesFromData","content","pageSettingsImages","get","filter","image","src","fileIds","map","imageFile","id","imageFilesData","length","filesData","listFiles","where","id_in","limit","push","pageData","title","path","version","status","settings","pageDataBuffer","Buffer","from","JSON","stringify","zipper","Zipper","exportInfo","name","dataBuffer","archiveFileKey","process","exports"],"sources":["PageExporter.ts"],"sourcesContent":["import get from \"lodash/get\";\nimport { Page } from \"@webiny/api-page-builder/types\";\nimport { File, FileManagerContext } from \"@webiny/api-file-manager/types\";\nimport Zipper from \"~/export/zipper\";\nimport { extractFilesFromData } from \"~/export/utils\";\n\nexport interface ExportedPageData {\n /**\n * TODO: is it really ok not to export whole page object?\n * What if we add some new properties in the future?\n *\n * Type of the exported page data is now created by removing unnecessary properties from the Page type.\n * This way TS will break if we add new property and forget to handle it in the export/import process.\n */\n page: Omit<\n Page,\n | \"id\"\n | \"pid\"\n | \"tenant\"\n | \"locale\"\n | \"editor\"\n | \"category\"\n | \"createdFrom\"\n | \"createdBy\"\n | \"createdOn\"\n | \"savedOn\"\n | \"publishedOn\"\n | \"locked\"\n | \"ownedBy\"\n | \"webinyVersion\"\n >;\n files: File[];\n}\n\nexport class PageExporter {\n private fileManager: FileManagerContext[\"fileManager\"];\n\n constructor(fileManager: FileManagerContext[\"fileManager\"]) {\n this.fileManager = fileManager;\n }\n\n async execute(page: Page, exportPagesDataKey: string) {\n // Extract all files\n const files = extractFilesFromData(page.content || {});\n // Extract images from page settings\n const pageSettingsImages = [\n get(page, \"settings.general.image\") as unknown as File,\n get(page, \"settings.social.image\") as unknown as File\n ].filter(image => image && image.src);\n\n const fileIds = [...files, ...pageSettingsImages].map(imageFile => imageFile.id);\n // Get file data for all images\n const imageFilesData: File[] = [];\n if (fileIds.length > 0) {\n const [filesData] = await this.fileManager.listFiles({\n where: {\n id_in: fileIds\n },\n limit: 10000\n });\n imageFilesData.push(...filesData);\n }\n\n // Extract the page data in a json file and upload it to S3\n const pageData: ExportedPageData = {\n page: {\n content: page.content,\n title: page.title,\n path: page.path,\n version: page.version,\n status: page.status,\n settings: page.settings\n },\n files: imageFilesData\n };\n const pageDataBuffer = Buffer.from(JSON.stringify(pageData));\n\n const zipper = new Zipper({\n exportInfo: {\n files: imageFilesData,\n name: page.title,\n dataBuffer: pageDataBuffer\n },\n archiveFileKey: exportPagesDataKey\n });\n\n return zipper.process();\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AA8BO,MAAMG,YAAY,CAAC;EAGtBC,WAAWA,CAACC,WAA8C,EAAE;IACxD,IAAI,CAACA,WAAW,GAAGA,WAAW;EAClC;EAEA,MAAMC,OAAOA,CAACC,IAAU,EAAEC,kBAA0B,EAAE;IAClD;IACA,MAAMC,KAAK,GAAG,IAAAC,2BAAoB,EAACH,IAAI,CAACI,OAAO,IAAI,CAAC,CAAC,CAAC;IACtD;IACA,MAAMC,kBAAkB,GAAG,CACvB,IAAAC,YAAG,EAACN,IAAI,EAAE,wBAAwB,CAAC,EACnC,IAAAM,YAAG,EAACN,IAAI,EAAE,uBAAuB,CAAC,CACrC,CAACO,MAAM,CAACC,KAAK,IAAIA,KAAK,IAAIA,KAAK,CAACC,GAAG,CAAC;IAErC,MAAMC,OAAO,GAAG,CAAC,GAAGR,KAAK,EAAE,GAAGG,kBAAkB,CAAC,CAACM,GAAG,CAACC,SAAS,IAAIA,SAAS,CAACC,EAAE,CAAC;IAChF;IACA,MAAMC,cAAsB,GAAG,EAAE;IACjC,IAAIJ,OAAO,CAACK,MAAM,GAAG,CAAC,EAAE;MACpB,MAAM,CAACC,SAAS,CAAC,GAAG,MAAM,IAAI,CAAClB,WAAW,CAACmB,SAAS,CAAC;QACjDC,KAAK,EAAE;UACHC,KAAK,EAAET;QACX,CAAC;QACDU,KAAK,EAAE;MACX,CAAC,CAAC;MACFN,cAAc,CAACO,IAAI,CAAC,GAAGL,SAAS,CAAC;IACrC;;IAEA;IACA,MAAMM,QAA0B,GAAG;MAC/BtB,IAAI,EAAE;QACFI,OAAO,EAAEJ,IAAI,CAACI,OAAO;QACrBmB,KAAK,EAAEvB,IAAI,CAACuB,KAAK;QACjBC,IAAI,EAAExB,IAAI,CAACwB,IAAI;QACfC,OAAO,EAAEzB,IAAI,CAACyB,OAAO;QACrBC,MAAM,EAAE1B,IAAI,CAAC0B,MAAM;QACnBC,QAAQ,EAAE3B,IAAI,CAAC2B;MACnB,CAAC;MACDzB,KAAK,EAAEY;IACX,CAAC;IACD,MAAMc,cAAc,GAAGC,MAAM,CAACC,IAAI,CAACC,IAAI,CAACC,SAAS,CAACV,QAAQ,CAAC,CAAC;IAE5D,MAAMW,MAAM,GAAG,IAAIC,eAAM,CAAC;MACtBC,UAAU,EAAE;QACRjC,KAAK,EAAEY,cAAc;QACrBsB,IAAI,EAAEpC,IAAI,CAACuB,KAAK;QAChBc,UAAU,EAAET;MAChB,CAAC;MACDU,cAAc,EAAErC;IACpB,CAAC,CAAC;IAEF,OAAOgC,MAAM,CAACM,OAAO,CAAC,CAAC;EAC3B;AACJ;AAACC,OAAA,CAAA5C,YAAA,GAAAA,YAAA","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
+ /// <reference types="node" />
3
4
  import { Readable } from "stream";
4
5
  import { S3, ListObjectsOutput, DeleteObjectOutput, HeadObjectOutput } from "@webiny/aws-sdk/client-s3";
5
6
  export type { ListObjectsOutput };
@@ -1,5 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
+ /// <reference types="node" />
3
4
  import { CompleteMultipartUploadOutput } from "@webiny/aws-sdk/client-s3";
4
5
  import { Readable } from "stream";
5
6
  import { File } from "@webiny/api-file-manager/types";
@@ -1,3 +1,3 @@
1
1
  import { ErrorResponse, ListErrorResponse, ListResponse, Response } from "@webiny/handler-graphql";
2
- export declare const resolve: (fn: () => Promise<any>) => Promise<ErrorResponse | Response<any>>;
3
- export declare const resolveList: (fn: () => Promise<any>) => Promise<ListErrorResponse | ListResponse<unknown, any>>;
2
+ export declare const resolve: (fn: () => Promise<any>) => Promise<Response<any> | ErrorResponse>;
3
+ export declare const resolveList: (fn: () => Promise<any>) => Promise<ListResponse<unknown, any> | ListErrorResponse>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-page-builder-import-export",
3
- "version": "5.41.0-dbt.0",
3
+ "version": "5.41.1-beta.0",
4
4
  "main": "index.js",
5
5
  "keywords": [
6
6
  "pbie:base"
@@ -17,20 +17,20 @@
17
17
  "@babel/runtime": "7.24.1",
18
18
  "@commodo/fields": "1.1.2-beta.20",
19
19
  "@smithy/node-http-handler": "2.1.6",
20
- "@webiny/api": "5.41.0-dbt.0",
21
- "@webiny/api-file-manager": "5.41.0-dbt.0",
22
- "@webiny/api-form-builder": "5.41.0-dbt.0",
23
- "@webiny/api-page-builder": "5.41.0-dbt.0",
24
- "@webiny/api-security": "5.41.0-dbt.0",
25
- "@webiny/aws-sdk": "5.41.0-dbt.0",
26
- "@webiny/error": "5.41.0-dbt.0",
27
- "@webiny/handler": "5.41.0-dbt.0",
28
- "@webiny/handler-aws": "5.41.0-dbt.0",
29
- "@webiny/handler-graphql": "5.41.0-dbt.0",
30
- "@webiny/pubsub": "5.41.0-dbt.0",
31
- "@webiny/tasks": "5.41.0-dbt.0",
32
- "@webiny/utils": "5.41.0-dbt.0",
33
- "@webiny/validation": "5.41.0-dbt.0",
20
+ "@webiny/api": "5.41.1-beta.0",
21
+ "@webiny/api-file-manager": "5.41.1-beta.0",
22
+ "@webiny/api-form-builder": "5.41.1-beta.0",
23
+ "@webiny/api-page-builder": "5.41.1-beta.0",
24
+ "@webiny/api-security": "5.41.1-beta.0",
25
+ "@webiny/aws-sdk": "5.41.1-beta.0",
26
+ "@webiny/error": "5.41.1-beta.0",
27
+ "@webiny/handler": "5.41.1-beta.0",
28
+ "@webiny/handler-aws": "5.41.1-beta.0",
29
+ "@webiny/handler-graphql": "5.41.1-beta.0",
30
+ "@webiny/pubsub": "5.41.1-beta.0",
31
+ "@webiny/tasks": "5.41.1-beta.0",
32
+ "@webiny/utils": "5.41.1-beta.0",
33
+ "@webiny/validation": "5.41.1-beta.0",
34
34
  "archiver": "7.0.1",
35
35
  "commodo-fields-object": "1.0.6",
36
36
  "dot-prop-immutable": "2.1.1",
@@ -51,13 +51,13 @@
51
51
  "@types/archiver": "5.3.1",
52
52
  "@types/node-fetch": "2.6.2",
53
53
  "@types/yauzl": "2.10.0",
54
- "@webiny/api-authentication": "5.41.0-dbt.0",
55
- "@webiny/api-dynamodb-to-elasticsearch": "5.41.0-dbt.0",
56
- "@webiny/api-tenancy": "5.41.0-dbt.0",
57
- "@webiny/api-wcp": "5.41.0-dbt.0",
58
- "@webiny/cli": "5.41.0-dbt.0",
59
- "@webiny/db": "5.41.0-dbt.0",
60
- "@webiny/project-utils": "5.41.0-dbt.0",
54
+ "@webiny/api-authentication": "5.41.1-beta.0",
55
+ "@webiny/api-dynamodb-to-elasticsearch": "5.41.1-beta.0",
56
+ "@webiny/api-tenancy": "5.41.1-beta.0",
57
+ "@webiny/api-wcp": "5.41.1-beta.0",
58
+ "@webiny/cli": "5.41.1-beta.0",
59
+ "@webiny/db": "5.41.1-beta.0",
60
+ "@webiny/project-utils": "5.41.1-beta.0",
61
61
  "jest": "29.7.0",
62
62
  "jest-dynalite": "3.6.1",
63
63
  "rimraf": "5.0.5",
@@ -72,5 +72,5 @@
72
72
  "build": "yarn webiny run build",
73
73
  "watch": "yarn webiny run watch"
74
74
  },
75
- "gitHead": "bbaec4dd1685579548c08bbde386aee5d96b80f8"
75
+ "gitHead": "004f3d7a2022be14f14bd2f9342d009d7974ccd0"
76
76
  }
@@ -42,7 +42,7 @@ class ChildTasksCleanup {
42
42
  * First, we need to remove all the logs which have no errors.
43
43
  */
44
44
  for (const log of childLogs) {
45
- if (log.items.some(item => item.type === _tasks.ITaskLogItemType.ERROR)) {
45
+ if (log.items.some(item => item.type === _tasks.TaskLogItemType.ERROR)) {
46
46
  continue;
47
47
  }
48
48
  await context.tasks.deleteLog(log.id);
@@ -1 +1 @@
1
- {"version":3,"names":["_tasks","require","ChildTasksCleanup","execute","params","context","task","items","childTasks","tasks","listTasks","where","parentId","id","limit","length","childTaskIdList","map","childTask","childLogs","listLogs","task_in","deletedChildTaskLogIdList","log","some","item","type","ITaskLogItemType","ERROR","deleteLog","includes","push","childTaskId","deleteTask","exports"],"sources":["ChildTasksCleanup.ts"],"sourcesContent":["/**\n * Cleanup of the child tasks.\n * This code will remove all the child tasks and their logs, which have no errors in them.\n */\nimport { ITask, Context, ITaskLogItemType } from \"@webiny/tasks\";\n\nexport interface IChildTasksCleanupExecuteParams {\n context: Context;\n task: ITask;\n}\nexport class ChildTasksCleanup {\n public async execute(params: IChildTasksCleanupExecuteParams): Promise<void> {\n const { context, task } = params;\n\n const { items: childTasks } = await context.tasks.listTasks({\n where: {\n parentId: task.id\n },\n // Really doubtful there will be more than 10k of child tasks.\n limit: 100000\n });\n if (childTasks.length === 0) {\n return;\n }\n\n const childTaskIdList = childTasks.map(childTask => childTask.id);\n\n const { items: childLogs } = await context.tasks.listLogs({\n where: {\n task_in: childTaskIdList\n },\n limit: 100000\n });\n\n const deletedChildTaskLogIdList: string[] = [];\n /**\n * First, we need to remove all the logs which have no errors.\n */\n for (const log of childLogs) {\n if (log.items.some(item => item.type === ITaskLogItemType.ERROR)) {\n continue;\n }\n await context.tasks.deleteLog(log.id);\n if (deletedChildTaskLogIdList.includes(log.task)) {\n continue;\n }\n deletedChildTaskLogIdList.push(log.task);\n }\n /**\n * Now we can remove the tasks.\n */\n for (const childTaskId of deletedChildTaskLogIdList) {\n await context.tasks.deleteTask(childTaskId);\n }\n }\n}\n"],"mappings":";;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AAJA;AACA;AACA;AACA;;AAOO,MAAMC,iBAAiB,CAAC;EAC3B,MAAaC,OAAOA,CAACC,MAAuC,EAAiB;IACzE,MAAM;MAAEC,OAAO;MAAEC;IAAK,CAAC,GAAGF,MAAM;IAEhC,MAAM;MAAEG,KAAK,EAAEC;IAAW,CAAC,GAAG,MAAMH,OAAO,CAACI,KAAK,CAACC,SAAS,CAAC;MACxDC,KAAK,EAAE;QACHC,QAAQ,EAAEN,IAAI,CAACO;MACnB,CAAC;MACD;MACAC,KAAK,EAAE;IACX,CAAC,CAAC;IACF,IAAIN,UAAU,CAACO,MAAM,KAAK,CAAC,EAAE;MACzB;IACJ;IAEA,MAAMC,eAAe,GAAGR,UAAU,CAACS,GAAG,CAACC,SAAS,IAAIA,SAAS,CAACL,EAAE,CAAC;IAEjE,MAAM;MAAEN,KAAK,EAAEY;IAAU,CAAC,GAAG,MAAMd,OAAO,CAACI,KAAK,CAACW,QAAQ,CAAC;MACtDT,KAAK,EAAE;QACHU,OAAO,EAAEL;MACb,CAAC;MACDF,KAAK,EAAE;IACX,CAAC,CAAC;IAEF,MAAMQ,yBAAmC,GAAG,EAAE;IAC9C;AACR;AACA;IACQ,KAAK,MAAMC,GAAG,IAAIJ,SAAS,EAAE;MACzB,IAAII,GAAG,CAAChB,KAAK,CAACiB,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,IAAI,KAAKC,uBAAgB,CAACC,KAAK,CAAC,EAAE;QAC9D;MACJ;MACA,MAAMvB,OAAO,CAACI,KAAK,CAACoB,SAAS,CAACN,GAAG,CAACV,EAAE,CAAC;MACrC,IAAIS,yBAAyB,CAACQ,QAAQ,CAACP,GAAG,CAACjB,IAAI,CAAC,EAAE;QAC9C;MACJ;MACAgB,yBAAyB,CAACS,IAAI,CAACR,GAAG,CAACjB,IAAI,CAAC;IAC5C;IACA;AACR;AACA;IACQ,KAAK,MAAM0B,WAAW,IAAIV,yBAAyB,EAAE;MACjD,MAAMjB,OAAO,CAACI,KAAK,CAACwB,UAAU,CAACD,WAAW,CAAC;IAC/C;EACJ;AACJ;AAACE,OAAA,CAAAhC,iBAAA,GAAAA,iBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_tasks","require","ChildTasksCleanup","execute","params","context","task","items","childTasks","tasks","listTasks","where","parentId","id","limit","length","childTaskIdList","map","childTask","childLogs","listLogs","task_in","deletedChildTaskLogIdList","log","some","item","type","TaskLogItemType","ERROR","deleteLog","includes","push","childTaskId","deleteTask","exports"],"sources":["ChildTasksCleanup.ts"],"sourcesContent":["/**\n * Cleanup of the child tasks.\n * This code will remove all the child tasks and their logs, which have no errors in them.\n */\nimport { ITask, Context, TaskLogItemType } from \"@webiny/tasks\";\n\nexport interface IChildTasksCleanupExecuteParams {\n context: Context;\n task: ITask;\n}\nexport class ChildTasksCleanup {\n public async execute(params: IChildTasksCleanupExecuteParams): Promise<void> {\n const { context, task } = params;\n\n const { items: childTasks } = await context.tasks.listTasks({\n where: {\n parentId: task.id\n },\n // Really doubtful there will be more than 10k of child tasks.\n limit: 100000\n });\n if (childTasks.length === 0) {\n return;\n }\n\n const childTaskIdList = childTasks.map(childTask => childTask.id);\n\n const { items: childLogs } = await context.tasks.listLogs({\n where: {\n task_in: childTaskIdList\n },\n limit: 100000\n });\n\n const deletedChildTaskLogIdList: string[] = [];\n /**\n * First, we need to remove all the logs which have no errors.\n */\n for (const log of childLogs) {\n if (log.items.some(item => item.type === TaskLogItemType.ERROR)) {\n continue;\n }\n await context.tasks.deleteLog(log.id);\n if (deletedChildTaskLogIdList.includes(log.task)) {\n continue;\n }\n deletedChildTaskLogIdList.push(log.task);\n }\n /**\n * Now we can remove the tasks.\n */\n for (const childTaskId of deletedChildTaskLogIdList) {\n await context.tasks.deleteTask(childTaskId);\n }\n }\n}\n"],"mappings":";;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AAJA;AACA;AACA;AACA;;AAOO,MAAMC,iBAAiB,CAAC;EAC3B,MAAaC,OAAOA,CAACC,MAAuC,EAAiB;IACzE,MAAM;MAAEC,OAAO;MAAEC;IAAK,CAAC,GAAGF,MAAM;IAEhC,MAAM;MAAEG,KAAK,EAAEC;IAAW,CAAC,GAAG,MAAMH,OAAO,CAACI,KAAK,CAACC,SAAS,CAAC;MACxDC,KAAK,EAAE;QACHC,QAAQ,EAAEN,IAAI,CAACO;MACnB,CAAC;MACD;MACAC,KAAK,EAAE;IACX,CAAC,CAAC;IACF,IAAIN,UAAU,CAACO,MAAM,KAAK,CAAC,EAAE;MACzB;IACJ;IAEA,MAAMC,eAAe,GAAGR,UAAU,CAACS,GAAG,CAACC,SAAS,IAAIA,SAAS,CAACL,EAAE,CAAC;IAEjE,MAAM;MAAEN,KAAK,EAAEY;IAAU,CAAC,GAAG,MAAMd,OAAO,CAACI,KAAK,CAACW,QAAQ,CAAC;MACtDT,KAAK,EAAE;QACHU,OAAO,EAAEL;MACb,CAAC;MACDF,KAAK,EAAE;IACX,CAAC,CAAC;IAEF,MAAMQ,yBAAmC,GAAG,EAAE;IAC9C;AACR;AACA;IACQ,KAAK,MAAMC,GAAG,IAAIJ,SAAS,EAAE;MACzB,IAAII,GAAG,CAAChB,KAAK,CAACiB,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACC,IAAI,KAAKC,sBAAe,CAACC,KAAK,CAAC,EAAE;QAC7D;MACJ;MACA,MAAMvB,OAAO,CAACI,KAAK,CAACoB,SAAS,CAACN,GAAG,CAACV,EAAE,CAAC;MACrC,IAAIS,yBAAyB,CAACQ,QAAQ,CAACP,GAAG,CAACjB,IAAI,CAAC,EAAE;QAC9C;MACJ;MACAgB,yBAAyB,CAACS,IAAI,CAACR,GAAG,CAACjB,IAAI,CAAC;IAC5C;IACA;AACR;AACA;IACQ,KAAK,MAAM0B,WAAW,IAAIV,yBAAyB,EAAE;MACjD,MAAMjB,OAAO,CAACI,KAAK,CAACwB,UAAU,CAACD,WAAW,CAAC;IAC/C;EACJ;AACJ;AAACE,OAAA,CAAAhC,iBAAA,GAAAA,iBAAA","ignoreList":[]}
@@ -10,6 +10,7 @@ var _ChildTasksCleanup = require("../common/ChildTasksCleanup");
10
10
  const createExportPagesControllerTask = () => {
11
11
  // TODO make the task private with createPrivateTaskDefinition
12
12
  return (0, _tasks.createTaskDefinition)({
13
+ isPrivate: true,
13
14
  id: _types.PageExportTask.Controller,
14
15
  title: "Page Builder - Export Pages - Controller",
15
16
  description: "Export pages from the Page Builder - controller.",
@@ -1 +1 @@
1
- {"version":3,"names":["_tasks","require","_types","_ChildTasksCleanup","createExportPagesControllerTask","createTaskDefinition","id","PageExportTask","Controller","title","description","maxIterations","run","params","response","isAborted","aborted","ExportPagesController","exportPagesController","execute","onDone","context","task","tasks","trigger","definition","Cleanup","parent","delay","childTasksCleanup","ChildTasksCleanup","ex","console","error","onError","onAbort","exports"],"sources":["exportPagesControllerTask.ts"],"sourcesContent":["import { createTaskDefinition } from \"@webiny/tasks\";\nimport { PbImportExportContext } from \"~/graphql/types\";\nimport {\n IExportPagesControllerInput,\n IExportPagesControllerOutput,\n PageExportTask\n} from \"~/export/pages/types\";\nimport { ChildTasksCleanup } from \"../common/ChildTasksCleanup\";\n\nexport const createExportPagesControllerTask = () => {\n // TODO make the task private with createPrivateTaskDefinition\n return createTaskDefinition<\n PbImportExportContext,\n IExportPagesControllerInput,\n IExportPagesControllerOutput\n >({\n id: PageExportTask.Controller,\n title: \"Page Builder - Export Pages - Controller\",\n description: \"Export pages from the Page Builder - controller.\",\n /**\n * We want to have a lot of executions because we need to pool the subtasks all the time.\n */\n maxIterations: 500,\n run: async params => {\n const { response, isAborted } = params;\n /**\n * We always need to check task status.\n */\n if (isAborted()) {\n return response.aborted();\n }\n\n const { ExportPagesController } = await import(\n /* webpackChunkName: \"ExportPagesController\" */ \"~/export/pages/ExportPagesController\"\n );\n\n const exportPagesController = new ExportPagesController();\n return await exportPagesController.execute(params);\n },\n onDone: async ({ context, task }) => {\n await context.tasks.trigger({\n definition: PageExportTask.Cleanup,\n parent: task,\n // delay cleanup for 25hrs\n delay: 25 * 60 * 60\n });\n /**\n * We want to clean all child tasks and logs, which have no errors.\n */\n const childTasksCleanup = new ChildTasksCleanup();\n try {\n await childTasksCleanup.execute({\n context,\n task\n });\n } catch (ex) {\n console.error(\"Error while cleaning child tasks.\", ex);\n }\n },\n onError: async ({ context, task }) => {\n await context.tasks.trigger({\n definition: PageExportTask.Cleanup,\n parent: task\n });\n },\n onAbort: async ({ context, task }) => {\n await context.tasks.trigger({\n definition: PageExportTask.Cleanup,\n parent: task\n });\n }\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAKA,IAAAE,kBAAA,GAAAF,OAAA;AAEO,MAAMG,+BAA+B,GAAGA,CAAA,KAAM;EACjD;EACA,OAAO,IAAAC,2BAAoB,EAIzB;IACEC,EAAE,EAAEC,qBAAc,CAACC,UAAU;IAC7BC,KAAK,EAAE,0CAA0C;IACjDC,WAAW,EAAE,kDAAkD;IAC/D;AACR;AACA;IACQC,aAAa,EAAE,GAAG;IAClBC,GAAG,EAAE,MAAMC,MAAM,IAAI;MACjB,MAAM;QAAEC,QAAQ;QAAEC;MAAU,CAAC,GAAGF,MAAM;MACtC;AACZ;AACA;MACY,IAAIE,SAAS,CAAC,CAAC,EAAE;QACb,OAAOD,QAAQ,CAACE,OAAO,CAAC,CAAC;MAC7B;MAEA,MAAM;QAAEC;MAAsB,CAAC,GAAG,MAAM,MAAM,EAC1C,yFACJ,CAAC;MAED,MAAMC,qBAAqB,GAAG,IAAID,qBAAqB,CAAC,CAAC;MACzD,OAAO,MAAMC,qBAAqB,CAACC,OAAO,CAACN,MAAM,CAAC;IACtD,CAAC;IACDO,MAAM,EAAE,MAAAA,CAAO;MAAEC,OAAO;MAAEC;IAAK,CAAC,KAAK;MACjC,MAAMD,OAAO,CAACE,KAAK,CAACC,OAAO,CAAC;QACxBC,UAAU,EAAElB,qBAAc,CAACmB,OAAO;QAClCC,MAAM,EAAEL,IAAI;QACZ;QACAM,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG;MACrB,CAAC,CAAC;MACF;AACZ;AACA;MACY,MAAMC,iBAAiB,GAAG,IAAIC,oCAAiB,CAAC,CAAC;MACjD,IAAI;QACA,MAAMD,iBAAiB,CAACV,OAAO,CAAC;UAC5BE,OAAO;UACPC;QACJ,CAAC,CAAC;MACN,CAAC,CAAC,OAAOS,EAAE,EAAE;QACTC,OAAO,CAACC,KAAK,CAAC,mCAAmC,EAAEF,EAAE,CAAC;MAC1D;IACJ,CAAC;IACDG,OAAO,EAAE,MAAAA,CAAO;MAAEb,OAAO;MAAEC;IAAK,CAAC,KAAK;MAClC,MAAMD,OAAO,CAACE,KAAK,CAACC,OAAO,CAAC;QACxBC,UAAU,EAAElB,qBAAc,CAACmB,OAAO;QAClCC,MAAM,EAAEL;MACZ,CAAC,CAAC;IACN,CAAC;IACDa,OAAO,EAAE,MAAAA,CAAO;MAAEd,OAAO;MAAEC;IAAK,CAAC,KAAK;MAClC,MAAMD,OAAO,CAACE,KAAK,CAACC,OAAO,CAAC;QACxBC,UAAU,EAAElB,qBAAc,CAACmB,OAAO;QAClCC,MAAM,EAAEL;MACZ,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;AACN,CAAC;AAACc,OAAA,CAAAhC,+BAAA,GAAAA,+BAAA","ignoreList":[]}
1
+ {"version":3,"names":["_tasks","require","_types","_ChildTasksCleanup","createExportPagesControllerTask","createTaskDefinition","isPrivate","id","PageExportTask","Controller","title","description","maxIterations","run","params","response","isAborted","aborted","ExportPagesController","exportPagesController","execute","onDone","context","task","tasks","trigger","definition","Cleanup","parent","delay","childTasksCleanup","ChildTasksCleanup","ex","console","error","onError","onAbort","exports"],"sources":["exportPagesControllerTask.ts"],"sourcesContent":["import { createTaskDefinition } from \"@webiny/tasks\";\nimport { PbImportExportContext } from \"~/graphql/types\";\nimport {\n IExportPagesControllerInput,\n IExportPagesControllerOutput,\n PageExportTask\n} from \"~/export/pages/types\";\nimport { ChildTasksCleanup } from \"../common/ChildTasksCleanup\";\n\nexport const createExportPagesControllerTask = () => {\n // TODO make the task private with createPrivateTaskDefinition\n return createTaskDefinition<\n PbImportExportContext,\n IExportPagesControllerInput,\n IExportPagesControllerOutput\n >({\n isPrivate: true,\n id: PageExportTask.Controller,\n title: \"Page Builder - Export Pages - Controller\",\n description: \"Export pages from the Page Builder - controller.\",\n /**\n * We want to have a lot of executions because we need to pool the subtasks all the time.\n */\n maxIterations: 500,\n run: async params => {\n const { response, isAborted } = params;\n /**\n * We always need to check task status.\n */\n if (isAborted()) {\n return response.aborted();\n }\n\n const { ExportPagesController } = await import(\n /* webpackChunkName: \"ExportPagesController\" */ \"~/export/pages/ExportPagesController\"\n );\n\n const exportPagesController = new ExportPagesController();\n return await exportPagesController.execute(params);\n },\n onDone: async ({ context, task }) => {\n await context.tasks.trigger({\n definition: PageExportTask.Cleanup,\n parent: task,\n // delay cleanup for 25hrs\n delay: 25 * 60 * 60\n });\n /**\n * We want to clean all child tasks and logs, which have no errors.\n */\n const childTasksCleanup = new ChildTasksCleanup();\n try {\n await childTasksCleanup.execute({\n context,\n task\n });\n } catch (ex) {\n console.error(\"Error while cleaning child tasks.\", ex);\n }\n },\n onError: async ({ context, task }) => {\n await context.tasks.trigger({\n definition: PageExportTask.Cleanup,\n parent: task\n });\n },\n onAbort: async ({ context, task }) => {\n await context.tasks.trigger({\n definition: PageExportTask.Cleanup,\n parent: task\n });\n }\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAKA,IAAAE,kBAAA,GAAAF,OAAA;AAEO,MAAMG,+BAA+B,GAAGA,CAAA,KAAM;EACjD;EACA,OAAO,IAAAC,2BAAoB,EAIzB;IACEC,SAAS,EAAE,IAAI;IACfC,EAAE,EAAEC,qBAAc,CAACC,UAAU;IAC7BC,KAAK,EAAE,0CAA0C;IACjDC,WAAW,EAAE,kDAAkD;IAC/D;AACR;AACA;IACQC,aAAa,EAAE,GAAG;IAClBC,GAAG,EAAE,MAAMC,MAAM,IAAI;MACjB,MAAM;QAAEC,QAAQ;QAAEC;MAAU,CAAC,GAAGF,MAAM;MACtC;AACZ;AACA;MACY,IAAIE,SAAS,CAAC,CAAC,EAAE;QACb,OAAOD,QAAQ,CAACE,OAAO,CAAC,CAAC;MAC7B;MAEA,MAAM;QAAEC;MAAsB,CAAC,GAAG,MAAM,MAAM,EAC1C,yFACJ,CAAC;MAED,MAAMC,qBAAqB,GAAG,IAAID,qBAAqB,CAAC,CAAC;MACzD,OAAO,MAAMC,qBAAqB,CAACC,OAAO,CAACN,MAAM,CAAC;IACtD,CAAC;IACDO,MAAM,EAAE,MAAAA,CAAO;MAAEC,OAAO;MAAEC;IAAK,CAAC,KAAK;MACjC,MAAMD,OAAO,CAACE,KAAK,CAACC,OAAO,CAAC;QACxBC,UAAU,EAAElB,qBAAc,CAACmB,OAAO;QAClCC,MAAM,EAAEL,IAAI;QACZ;QACAM,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG;MACrB,CAAC,CAAC;MACF;AACZ;AACA;MACY,MAAMC,iBAAiB,GAAG,IAAIC,oCAAiB,CAAC,CAAC;MACjD,IAAI;QACA,MAAMD,iBAAiB,CAACV,OAAO,CAAC;UAC5BE,OAAO;UACPC;QACJ,CAAC,CAAC;MACN,CAAC,CAAC,OAAOS,EAAE,EAAE;QACTC,OAAO,CAACC,KAAK,CAAC,mCAAmC,EAAEF,EAAE,CAAC;MAC1D;IACJ,CAAC;IACDG,OAAO,EAAE,MAAAA,CAAO;MAAEb,OAAO;MAAEC;IAAK,CAAC,KAAK;MAClC,MAAMD,OAAO,CAACE,KAAK,CAACC,OAAO,CAAC;QACxBC,UAAU,EAAElB,qBAAc,CAACmB,OAAO;QAClCC,MAAM,EAAEL;MACZ,CAAC,CAAC;IACN,CAAC;IACDa,OAAO,EAAE,MAAAA,CAAO;MAAEd,OAAO;MAAEC;IAAK,CAAC,KAAK;MAClC,MAAMD,OAAO,CAACE,KAAK,CAACC,OAAO,CAAC;QACxBC,UAAU,EAAElB,qBAAc,CAACmB,OAAO;QAClCC,MAAM,EAAEL;MACZ,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;AACN,CAAC;AAACc,OAAA,CAAAjC,+BAAA,GAAAA,+BAAA","ignoreList":[]}
package/utils/ZipFiles.js CHANGED
@@ -21,7 +21,7 @@ class ZipFiles {
21
21
  }
22
22
  async process(targetFileName, files) {
23
23
  const fileNames = Array.from(files);
24
- const s3Client = (0, _clientS.createS3Client)({
24
+ const s3Client = (0, _clientS.createS3)({
25
25
  requestHandler: new _nodeHttpHandler.NodeHttpHandler({
26
26
  connectionTimeout: 0,
27
27
  httpAgent: new _http.Agent({
@@ -1 +1 @@
1
- {"version":3,"names":["_archiver","require","_clientS","_path","_interopRequireDefault","_stream","_libStorage","_nodeHttpHandler","_https","_http","ZipFiles","bucket","process","env","S3_BUCKET","debug","DEBUG","constructor","options","setDebug","targetFileName","files","fileNames","Array","from","s3Client","createS3Client","requestHandler","NodeHttpHandler","connectionTimeout","httpAgent","HttpAgent","maxSockets","keepAlive","maxFreeSockets","maxTotalSockets","keepAliveMsecs","httpsAgent","HttpsAgent","sessionTimeout","maxCachedSessions","requestTimeout","streamPassThrough","Stream","PassThrough","autoDestroy","upload","Upload","client","params","ACL","Body","Bucket","ContentType","Key","queueSize","partSize","leavePartsOnError","archive","createArchiver","on","error","console","Error","name","code","message","path","stack","pipe","data","log","addFileToArchive","file","shift","setTimeout","finalize","cmd","GetObjectCommand","response","send","basename","append","result","done","destroy","undefined","exports"],"sources":["ZipFiles.ts"],"sourcesContent":["import { ArchiverError, create as createArchiver } from \"archiver\";\nimport {\n CompleteMultipartUploadOutput,\n createS3Client,\n GetObjectCommand\n} from \"@webiny/aws-sdk/client-s3\";\nimport path from \"path\";\nimport { type Readable, Stream } from \"stream\";\nimport { Upload } from \"@webiny/aws-sdk/lib-storage\";\nimport { NodeHttpHandler } from \"@smithy/node-http-handler\";\nimport { Agent as HttpsAgent } from \"https\";\nimport { Agent as HttpAgent } from \"http\";\n\nexport interface ZipFilesOptions {\n debug?: boolean;\n}\n\nexport class ZipFiles {\n private readonly bucket: string = process.env.S3_BUCKET as string;\n private debug: boolean = process.env.DEBUG === \"true\";\n\n public constructor(options?: ZipFilesOptions) {\n this.setDebug(options?.debug);\n }\n\n public async process(\n targetFileName: string,\n files: string[]\n ): Promise<CompleteMultipartUploadOutput> {\n const fileNames = Array.from(files);\n const s3Client = createS3Client({\n requestHandler: new NodeHttpHandler({\n connectionTimeout: 0,\n httpAgent: new HttpAgent({\n maxSockets: 10000,\n keepAlive: true,\n maxFreeSockets: 10000,\n maxTotalSockets: 10000,\n keepAliveMsecs: 900000 // milliseconds / 15 minutes\n }),\n httpsAgent: new HttpsAgent({\n maxSockets: 10000,\n keepAlive: true,\n sessionTimeout: 900, // seconds / 15 minutes\n maxCachedSessions: 100000,\n maxFreeSockets: 10000,\n maxTotalSockets: 10000,\n keepAliveMsecs: 900000 // milliseconds / 15 minutes\n }),\n requestTimeout: 900000 // milliseconds / 15 minutes\n })\n });\n\n const streamPassThrough = new Stream.PassThrough({\n autoDestroy: true\n });\n\n const upload = new Upload({\n client: s3Client,\n params: {\n ACL: \"private\",\n Body: streamPassThrough,\n Bucket: this.bucket,\n ContentType: \"application/zip\",\n Key: targetFileName\n },\n queueSize: 1,\n partSize: 1024 * 1024 * 5,\n leavePartsOnError: false\n });\n\n const archive = createArchiver(\"zip\", {});\n\n archive.on(\"error\", (error: ArchiverError) => {\n console.error(error);\n throw new Error(\n `${error.name} ${error.code} ${error.message} ${error.path} ${error.stack}`\n );\n });\n\n archive.pipe(streamPassThrough);\n\n /**\n * To combine all the files into a single zip file, we need to add files one by one.\n *\n * addFileToArchive() method is called every time an entry event is triggered on the archive - it means that file was added into the archive.\n * The method is called manually, first time, to start the process.\n */\n\n archive.on(\"entry\", data => {\n this.debug && console.log(`Archived file: ${data.name}`);\n addFileToArchive();\n });\n\n const addFileToArchive = async (): Promise<void> => {\n const file = fileNames.shift();\n if (!file) {\n this.debug && console.log(\"No more files to add to the archive.\");\n /**\n * Must call finalize() with a timeout, otherwise the lambda crashes.\n */\n setTimeout(() => {\n archive.finalize();\n }, 200);\n return;\n }\n this.debug && console.log(`Adding file \"${file}\" to the archive.`);\n const cmd = new GetObjectCommand({\n Bucket: this.bucket,\n Key: file\n });\n\n const response = await s3Client.send(cmd);\n // Possible to get a null response.Body?\n // Typescript says yes, so let's check it.\n if (!response.Body) {\n this.debug &&\n console.log(`No response.Body for file \"${file}\", moving to next file.`);\n return addFileToArchive();\n }\n const name = `${path.basename(file)}`;\n\n archive.append(response.Body as Readable, {\n name\n });\n };\n\n addFileToArchive();\n\n const result = await upload.done();\n\n s3Client.destroy();\n return result;\n }\n\n private setDebug(debug?: boolean): void {\n if (debug === undefined) {\n return;\n }\n this.debug = debug;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_archiver","require","_clientS","_path","_interopRequireDefault","_stream","_libStorage","_nodeHttpHandler","_https","_http","ZipFiles","bucket","process","env","S3_BUCKET","debug","DEBUG","constructor","options","setDebug","targetFileName","files","fileNames","Array","from","s3Client","createS3","requestHandler","NodeHttpHandler","connectionTimeout","httpAgent","HttpAgent","maxSockets","keepAlive","maxFreeSockets","maxTotalSockets","keepAliveMsecs","httpsAgent","HttpsAgent","sessionTimeout","maxCachedSessions","requestTimeout","streamPassThrough","Stream","PassThrough","autoDestroy","upload","Upload","client","params","ACL","Body","Bucket","ContentType","Key","queueSize","partSize","leavePartsOnError","archive","createArchiver","on","error","console","Error","name","code","message","path","stack","pipe","data","log","addFileToArchive","file","shift","setTimeout","finalize","cmd","GetObjectCommand","response","send","basename","append","result","done","destroy","undefined","exports"],"sources":["ZipFiles.ts"],"sourcesContent":["import { ArchiverError, create as createArchiver } from \"archiver\";\nimport {\n CompleteMultipartUploadOutput,\n createS3,\n GetObjectCommand\n} from \"@webiny/aws-sdk/client-s3\";\nimport path from \"path\";\nimport { type Readable, Stream } from \"stream\";\nimport { Upload } from \"@webiny/aws-sdk/lib-storage\";\nimport { NodeHttpHandler } from \"@smithy/node-http-handler\";\nimport { Agent as HttpsAgent } from \"https\";\nimport { Agent as HttpAgent } from \"http\";\n\nexport interface ZipFilesOptions {\n debug?: boolean;\n}\n\nexport class ZipFiles {\n private readonly bucket: string = process.env.S3_BUCKET as string;\n private debug: boolean = process.env.DEBUG === \"true\";\n\n public constructor(options?: ZipFilesOptions) {\n this.setDebug(options?.debug);\n }\n\n public async process(\n targetFileName: string,\n files: string[]\n ): Promise<CompleteMultipartUploadOutput> {\n const fileNames = Array.from(files);\n const s3Client = createS3({\n requestHandler: new NodeHttpHandler({\n connectionTimeout: 0,\n httpAgent: new HttpAgent({\n maxSockets: 10000,\n keepAlive: true,\n maxFreeSockets: 10000,\n maxTotalSockets: 10000,\n keepAliveMsecs: 900000 // milliseconds / 15 minutes\n }),\n httpsAgent: new HttpsAgent({\n maxSockets: 10000,\n keepAlive: true,\n sessionTimeout: 900, // seconds / 15 minutes\n maxCachedSessions: 100000,\n maxFreeSockets: 10000,\n maxTotalSockets: 10000,\n keepAliveMsecs: 900000 // milliseconds / 15 minutes\n }),\n requestTimeout: 900000 // milliseconds / 15 minutes\n })\n });\n\n const streamPassThrough = new Stream.PassThrough({\n autoDestroy: true\n });\n\n const upload = new Upload({\n client: s3Client,\n params: {\n ACL: \"private\",\n Body: streamPassThrough,\n Bucket: this.bucket,\n ContentType: \"application/zip\",\n Key: targetFileName\n },\n queueSize: 1,\n partSize: 1024 * 1024 * 5,\n leavePartsOnError: false\n });\n\n const archive = createArchiver(\"zip\", {});\n\n archive.on(\"error\", (error: ArchiverError) => {\n console.error(error);\n throw new Error(\n `${error.name} ${error.code} ${error.message} ${error.path} ${error.stack}`\n );\n });\n\n archive.pipe(streamPassThrough);\n\n /**\n * To combine all the files into a single zip file, we need to add files one by one.\n *\n * addFileToArchive() method is called every time an entry event is triggered on the archive - it means that file was added into the archive.\n * The method is called manually, first time, to start the process.\n */\n\n archive.on(\"entry\", data => {\n this.debug && console.log(`Archived file: ${data.name}`);\n addFileToArchive();\n });\n\n const addFileToArchive = async (): Promise<void> => {\n const file = fileNames.shift();\n if (!file) {\n this.debug && console.log(\"No more files to add to the archive.\");\n /**\n * Must call finalize() with a timeout, otherwise the lambda crashes.\n */\n setTimeout(() => {\n archive.finalize();\n }, 200);\n return;\n }\n this.debug && console.log(`Adding file \"${file}\" to the archive.`);\n const cmd = new GetObjectCommand({\n Bucket: this.bucket,\n Key: file\n });\n\n const response = await s3Client.send(cmd);\n // Possible to get a null response.Body?\n // Typescript says yes, so let's check it.\n if (!response.Body) {\n this.debug &&\n console.log(`No response.Body for file \"${file}\", moving to next file.`);\n return addFileToArchive();\n }\n const name = `${path.basename(file)}`;\n\n archive.append(response.Body as Readable, {\n name\n });\n };\n\n addFileToArchive();\n\n const result = await upload.done();\n\n s3Client.destroy();\n return result;\n }\n\n private setDebug(debug?: boolean): void {\n if (debug === undefined) {\n return;\n }\n this.debug = debug;\n }\n}\n"],"mappings":"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","ignoreList":[]}