@webiny/api-headless-cms-import-export 5.41.4 → 5.42.0-beta.1
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.
- package/crud/index.js.map +1 -1
- package/crud/useCases/abortImportFromUrl/AbortImportFromUrlUseCase.js.map +1 -1
- package/crud/useCases/exportContentEntries/ExportContentEntriesUseCase.js.map +1 -1
- package/crud/useCases/importFromUrl/ImportFromUrlUseCase.js.map +1 -1
- package/crud/useCases/validateImportFromUrl/ValidateImportFromUrlUseCase.js.map +1 -1
- package/crud/useCases/validateImportFromUrlIntegrity/ValidateImportFromUrlIntegrityUseCase.js.map +1 -1
- package/crud/utils/makeSureModelsAreIdentical.js.map +1 -1
- package/graphql/resolvers.js.map +1 -1
- package/graphql/typeDefs.js +10 -2
- package/graphql/typeDefs.js.map +1 -1
- package/package.json +23 -28
- package/tasks/domain/ExportContentEntriesController.js.map +1 -1
- package/tasks/domain/ImportFromUrlController.js.map +1 -1
- package/tasks/domain/ImportFromUrlDownload.js.map +1 -1
- package/tasks/domain/downloadFileFromUrl/DownloadFileFromUrl.js.map +1 -1
- package/tasks/domain/exportContentAssets/ExportContentAssets.js.map +1 -1
- package/tasks/domain/exportContentEntries/ExportContentEntries.js.map +1 -1
- package/tasks/domain/importFromUrlControllerSteps/ImportFromUrlControllerDownloadStep.js.map +1 -1
- package/tasks/domain/importFromUrlControllerSteps/ImportFromUrlControllerProcessAssetsStep.js.map +1 -1
- package/tasks/domain/importFromUrlControllerSteps/ImportFromUrlControllerProcessEntriesStep.js.map +1 -1
- package/tasks/domain/importFromUrlControllerSteps/getChildTasks.js.map +1 -1
- package/tasks/domain/importFromUrlProcessAssets/ImportFromUrlProcessAssets.js.map +1 -1
- package/tasks/domain/importFromUrlProcessEntries/ImportFromUrlProcessEntries.js.map +1 -1
- package/tasks/domain/importFromUrlProcessEntries/ImportFromUrlProcessEntriesDecompress.js.map +1 -1
- package/tasks/domain/importFromUrlProcessEntries/ImportFromUrlProcessEntriesInsert.js.map +1 -1
- package/tasks/exportContentAssets.js +1 -1
- package/tasks/exportContentAssets.js.map +1 -1
- package/tasks/exportContentEntries.js +1 -1
- package/tasks/exportContentEntries.js.map +1 -1
- package/tasks/exportContentEntriesController.js +1 -1
- package/tasks/exportContentEntriesController.js.map +1 -1
- package/tasks/importFromUrlController.js +2 -2
- package/tasks/importFromUrlController.js.map +1 -1
- package/tasks/importFromUrlDownload.js +1 -1
- package/tasks/importFromUrlDownload.js.map +1 -1
- package/tasks/importFromUrlProcessAssets.js +1 -1
- package/tasks/importFromUrlProcessAssets.js.map +1 -1
- package/tasks/importFromUrlProcessEntries.js +1 -1
- package/tasks/importFromUrlProcessEntries.js.map +1 -1
- package/tasks/utils/cmsAssetsZipper/PointerStore.js.map +1 -1
- package/tasks/utils/cmsEntryZipper/CmsEntryZipper.js.map +1 -1
- package/tasks/utils/decompressor/Decompressor.js.map +1 -1
- package/tasks/utils/deleteFiles/DeleteFiles.js.map +1 -1
- package/tasks/utils/externalFileFetcher/ExternalFileFetcher.js.map +1 -1
- package/tasks/utils/fileFetcher/FileFetcher.js.map +1 -1
- package/tasks/utils/helpers/exportPath.js.map +1 -1
- package/tasks/utils/helpers/getBucket.js.map +1 -1
- package/tasks/utils/helpers/importPath.js.map +1 -1
- package/tasks/utils/helpers/matchKeyOrAlias.js.map +1 -1
- package/tasks/utils/helpers/sizeSegments.js +3 -0
- package/tasks/utils/helpers/sizeSegments.js.map +1 -1
- package/tasks/utils/upload/MultipartUploadFactory.js.map +1 -1
- package/tasks/utils/upload/getContentType.js.map +1 -1
- package/tasks/utils/upload/multipartUploadHandler/MultipartUploadHandler.js +1 -1
- package/tasks/utils/upload/multipartUploadHandler/MultipartUploadHandler.js.map +1 -1
- package/tasks/validateImportFromUrl.js +1 -1
- package/tasks/validateImportFromUrl.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_s3Client","require","_getBucket","_upload","_importPath","_downloadFileFromUrl","ImportFromUrlDownload","run","params","context","response","input","isCloseToTimeout","isAborted","modelId","error","message","code","file","cms","getModel","ex","client","createS3Client","filename","prependImportPath","key","uploadFactory","createMultipartUploadFactory","bucket","getBucket","createHandler","createMultipartUpload","uploadParams","uploadId","upload","start","download","createDownloadFileFromUrl","fetch","url","get","size","nextRange","result","process","stop","isClose","abort","aborted","continueValue","getUploadId","done","isDone","getNextRange","continue","output","exports"],"sources":["ImportFromUrlDownload.ts"],"sourcesContent":["import type { ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks/types\";\nimport type {\n IImportFromUrlDownload,\n IImportFromUrlDownloadInput,\n IImportFromUrlDownloadOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlDownload\";\nimport type { Context } from \"~/types\";\nimport { createS3Client } from \"~/tasks/utils/helpers/s3Client\";\nimport { getBucket } from \"~/tasks/utils/helpers/getBucket\";\nimport type { IMultipartUploadFactoryContinueParams } from \"~/tasks/utils/upload\";\nimport { createMultipartUpload, createMultipartUploadFactory } from \"~/tasks/utils/upload\";\nimport { prependImportPath } from \"~/tasks/utils/helpers/importPath\";\nimport type { IDownloadFileFromUrlProcessResponseType } from \"./downloadFileFromUrl\";\nimport { createDownloadFileFromUrl } from \"./downloadFileFromUrl\";\n\ntype ProcessType = IDownloadFileFromUrlProcessResponseType<\"continue\" | \"aborted\">;\n\nexport class ImportFromUrlDownload<\n C extends Context = Context,\n I extends IImportFromUrlDownloadInput = IImportFromUrlDownloadInput,\n O extends IImportFromUrlDownloadOutput = IImportFromUrlDownloadOutput\n> implements IImportFromUrlDownload<C, I, O>\n{\n public async run(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { context, response, input, isCloseToTimeout, isAborted } = params;\n\n if (!input.modelId) {\n return response.error({\n message: `Missing \"modelId\" in the input.`,\n code: \"MISSING_MODEL_ID\"\n });\n } else if (!input.file) {\n return response.error({\n message: `No file found in the provided data.`,\n code: \"NO_FILE_FOUND\"\n });\n }\n\n try {\n await context.cms.getModel(input.modelId);\n } catch (ex) {\n return response.error({\n message: `Model \"${input.modelId}\" not found.`,\n code: \"MODEL_NOT_FOUND\"\n });\n }\n\n const client = createS3Client();\n\n const filename = prependImportPath(input.file.key);\n const uploadFactory = createMultipartUploadFactory({\n client,\n bucket: getBucket(),\n filename,\n createHandler: createMultipartUpload\n });\n\n const uploadParams: IMultipartUploadFactoryContinueParams = {\n uploadId: input.uploadId\n };\n const upload = await uploadFactory.start(uploadParams);\n\n const download = createDownloadFileFromUrl({\n fetch,\n file: {\n url: input.file.get,\n size: input.file.size,\n key: input.file.key\n },\n nextRange: input.nextRange,\n upload\n });\n let result: ProcessType;\n try {\n result = await download.process<ProcessType>(async ({ stop }) => {\n const isClose = isCloseToTimeout();\n if (isClose) {\n return stop(\"continue\");\n } else if (isAborted()) {\n return stop(\"aborted\");\n }\n });\n } catch (ex) {\n return response.error(ex);\n }\n\n switch (result) {\n case \"aborted\":\n await upload.abort();\n return response.aborted();\n case \"continue\":\n const continueValue: I = {\n ...input,\n uploadId: upload.getUploadId(),\n done: download.isDone(),\n nextRange: download.getNextRange()\n };\n return response.continue({\n ...continueValue\n });\n case \"done\":\n const output: IImportFromUrlDownloadOutput = {\n file: filename\n };\n return response.done(output as O);\n /**\n * There should be nothing else other than \"continue\" or \"aborted\" or null.\n */\n default:\n await upload.abort();\n return response.error({\n message: `Method not implemented. Result: ${result}`\n });\n }\n }\n}\n"],"mappings":";;;;;;AAOA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAEA,IAAAI,oBAAA,GAAAJ,OAAA;AAIO,MAAMK,qBAAqB,CAKlC;EACI,MAAaC,GAAGA,CAACC,MAA+B,EAAsC;IAClF,MAAM;MAAEC,OAAO;MAAEC,QAAQ;MAAEC,KAAK;MAAEC,gBAAgB;MAAEC;IAAU,CAAC,GAAGL,MAAM;IAExE,IAAI,CAACG,KAAK,CAACG,OAAO,EAAE;MAChB,OAAOJ,QAAQ,CAACK,KAAK,CAAC;QAClBC,OAAO,
|
|
1
|
+
{"version":3,"names":["_s3Client","require","_getBucket","_upload","_importPath","_downloadFileFromUrl","ImportFromUrlDownload","run","params","context","response","input","isCloseToTimeout","isAborted","modelId","error","message","code","file","cms","getModel","ex","client","createS3Client","filename","prependImportPath","key","uploadFactory","createMultipartUploadFactory","bucket","getBucket","createHandler","createMultipartUpload","uploadParams","uploadId","upload","start","download","createDownloadFileFromUrl","fetch","url","get","size","nextRange","result","process","stop","isClose","abort","aborted","continueValue","getUploadId","done","isDone","getNextRange","continue","output","exports"],"sources":["ImportFromUrlDownload.ts"],"sourcesContent":["import type { ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks/types\";\nimport type {\n IImportFromUrlDownload,\n IImportFromUrlDownloadInput,\n IImportFromUrlDownloadOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlDownload\";\nimport type { Context } from \"~/types\";\nimport { createS3Client } from \"~/tasks/utils/helpers/s3Client\";\nimport { getBucket } from \"~/tasks/utils/helpers/getBucket\";\nimport type { IMultipartUploadFactoryContinueParams } from \"~/tasks/utils/upload\";\nimport { createMultipartUpload, createMultipartUploadFactory } from \"~/tasks/utils/upload\";\nimport { prependImportPath } from \"~/tasks/utils/helpers/importPath\";\nimport type { IDownloadFileFromUrlProcessResponseType } from \"./downloadFileFromUrl\";\nimport { createDownloadFileFromUrl } from \"./downloadFileFromUrl\";\n\ntype ProcessType = IDownloadFileFromUrlProcessResponseType<\"continue\" | \"aborted\">;\n\nexport class ImportFromUrlDownload<\n C extends Context = Context,\n I extends IImportFromUrlDownloadInput = IImportFromUrlDownloadInput,\n O extends IImportFromUrlDownloadOutput = IImportFromUrlDownloadOutput\n> implements IImportFromUrlDownload<C, I, O>\n{\n public async run(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { context, response, input, isCloseToTimeout, isAborted } = params;\n\n if (!input.modelId) {\n return response.error({\n message: `Missing \"modelId\" in the input.`,\n code: \"MISSING_MODEL_ID\"\n });\n } else if (!input.file) {\n return response.error({\n message: `No file found in the provided data.`,\n code: \"NO_FILE_FOUND\"\n });\n }\n\n try {\n await context.cms.getModel(input.modelId);\n } catch (ex) {\n return response.error({\n message: `Model \"${input.modelId}\" not found.`,\n code: \"MODEL_NOT_FOUND\"\n });\n }\n\n const client = createS3Client();\n\n const filename = prependImportPath(input.file.key);\n const uploadFactory = createMultipartUploadFactory({\n client,\n bucket: getBucket(),\n filename,\n createHandler: createMultipartUpload\n });\n\n const uploadParams: IMultipartUploadFactoryContinueParams = {\n uploadId: input.uploadId\n };\n const upload = await uploadFactory.start(uploadParams);\n\n const download = createDownloadFileFromUrl({\n fetch,\n file: {\n url: input.file.get,\n size: input.file.size,\n key: input.file.key\n },\n nextRange: input.nextRange,\n upload\n });\n let result: ProcessType;\n try {\n result = await download.process<ProcessType>(async ({ stop }) => {\n const isClose = isCloseToTimeout();\n if (isClose) {\n return stop(\"continue\");\n } else if (isAborted()) {\n return stop(\"aborted\");\n }\n });\n } catch (ex) {\n return response.error(ex);\n }\n\n switch (result) {\n case \"aborted\":\n await upload.abort();\n return response.aborted();\n case \"continue\":\n const continueValue: I = {\n ...input,\n uploadId: upload.getUploadId(),\n done: download.isDone(),\n nextRange: download.getNextRange()\n };\n return response.continue({\n ...continueValue\n });\n case \"done\":\n const output: IImportFromUrlDownloadOutput = {\n file: filename\n };\n return response.done(output as O);\n /**\n * There should be nothing else other than \"continue\" or \"aborted\" or null.\n */\n default:\n await upload.abort();\n return response.error({\n message: `Method not implemented. Result: ${result}`\n });\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_sizeSegments","require","DownloadFileFromUrl","constructor","params","file","fetch","nextRange","upload","ranges","createSizeSegments","size","process","onIteration","iteration","next","isDone","complete","status","undefined","segment","stop","input","abort","headers","Headers","length","set","start","end","result","url","method","keepalive","mode","ok","Error","body","buffer","arrayBuffer","add","Buffer","from","getNextRange","exports","createDownloadFileFromUrl"],"sources":["DownloadFileFromUrl.ts"],"sourcesContent":["import type { IMultipartUploadHandler } from \"~/tasks/utils/upload\";\nimport type {\n IDownloadFileFromUrl,\n IDownloadFileFromUrlProcessOnIterationCallable,\n IDownloadFileFromUrlProcessResponseType\n} from \"./abstractions/DownloadFileFromUrl\";\nimport { createSizeSegments } from \"~/tasks/utils/helpers/sizeSegments\";\n\nexport interface IDownloadFileFromUrlFile {\n url: string;\n size: number;\n key: string;\n}\n\ninterface IRange {\n start: number;\n end: number;\n}\n\nexport interface IDownloadFileFromUrlParams {\n file: IDownloadFileFromUrlFile;\n fetch: typeof fetch;\n upload: IMultipartUploadHandler;\n nextRange?: number;\n}\n\nexport class DownloadFileFromUrl implements IDownloadFileFromUrl {\n private readonly file: IDownloadFileFromUrlFile;\n private readonly upload: IMultipartUploadHandler;\n private readonly fetch: typeof fetch;\n private nextRange: number;\n private readonly ranges: IRange[];\n\n public constructor(params: IDownloadFileFromUrlParams) {\n this.file = params.file;\n this.fetch = params.fetch;\n this.nextRange = params.nextRange || 0;\n this.upload = params.upload;\n this.ranges = createSizeSegments(this.file.size, \"10MB\");\n }\n\n public async process<T extends string>(\n onIteration: IDownloadFileFromUrlProcessOnIterationCallable<T>\n ): Promise<IDownloadFileFromUrlProcessResponseType<T>> {\n let iteration = 0;\n\n while (true) {\n const next = this.ranges[this.nextRange];\n\n if (this.isDone() || !next) {\n await this.upload.complete();\n return \"done\";\n }\n let status: IDownloadFileFromUrlProcessResponseType<T> | undefined = undefined;\n await onIteration({\n iteration,\n next: this.nextRange,\n segment: next,\n stop: input => {\n status = input;\n }\n });\n if (status === \"done\") {\n await this.upload.complete();\n return status;\n } else if (status === \"aborted\") {\n await this.upload.abort();\n return status;\n } else if (status === \"continue\") {\n return status;\n }\n iteration++;\n\n const headers = new Headers();\n\n if (this.ranges.length > 1) {\n headers.set(\"Range\", `bytes=${next.start}-${next.end}`);\n }\n const result = await this.fetch(this.file.url, {\n method: \"GET\",\n keepalive: true,\n mode: \"cors\",\n headers\n });\n if (!result.ok) {\n throw new Error(`Failed to fetch URL: ${this.file.url}`);\n } else if (!result.body) {\n throw new Error(`Body not found for URL: ${this.file.url}`);\n }\n const buffer = await result.arrayBuffer();\n\n await this.upload.add(Buffer.from(buffer));\n this.nextRange++;\n }\n }\n\n public async abort(): Promise<void> {\n await this.upload.abort();\n }\n\n public getNextRange(): number {\n return this.nextRange;\n }\n\n public isDone(): boolean {\n return !this.ranges[this.nextRange];\n }\n}\n\nexport const createDownloadFileFromUrl = (\n params: IDownloadFileFromUrlParams\n): IDownloadFileFromUrl => {\n return new DownloadFileFromUrl(params);\n};\n"],"mappings":";;;;;;AAMA,IAAAA,aAAA,GAAAC,OAAA;AAoBO,MAAMC,mBAAmB,CAAiC;EAOtDC,WAAWA,CAACC,MAAkC,EAAE;IACnD,IAAI,CAACC,IAAI,GAAGD,MAAM,CAACC,IAAI;IACvB,IAAI,CAACC,KAAK,GAAGF,MAAM,CAACE,KAAK;IACzB,IAAI,CAACC,SAAS,GAAGH,MAAM,CAACG,SAAS,IAAI,CAAC;IACtC,IAAI,CAACC,MAAM,GAAGJ,MAAM,CAACI,MAAM;IAC3B,IAAI,CAACC,MAAM,GAAG,IAAAC,gCAAkB,EAAC,IAAI,CAACL,IAAI,CAACM,IAAI,EAAE,MAAM,CAAC;EAC5D;EAEA,MAAaC,OAAOA,CAChBC,WAA8D,EACX;IACnD,IAAIC,SAAS,GAAG,CAAC;IAEjB,OAAO,IAAI,EAAE;MACT,MAAMC,IAAI,GAAG,IAAI,CAACN,MAAM,CAAC,IAAI,CAACF,SAAS,CAAC;MAExC,IAAI,IAAI,CAACS,MAAM,CAAC,CAAC,IAAI,CAACD,IAAI,EAAE;QACxB,MAAM,IAAI,CAACP,MAAM,CAACS,QAAQ,CAAC,CAAC;QAC5B,OAAO,MAAM;MACjB;MACA,IAAIC,MAA8D,GAAGC,SAAS;MAC9E,MAAMN,WAAW,CAAC;QACdC,SAAS;QACTC,IAAI,EAAE,IAAI,CAACR,SAAS;QACpBa,OAAO,EAAEL,IAAI;QACbM,IAAI,EAAEC,KAAK,IAAI;UACXJ,MAAM,GAAGI,KAAK;QAClB;MACJ,CAAC,CAAC;MACF,IAAIJ,MAAM,KAAK,MAAM,EAAE;QACnB,MAAM,IAAI,CAACV,MAAM,CAACS,QAAQ,CAAC,CAAC;QAC5B,OAAOC,MAAM;MACjB,CAAC,MAAM,IAAIA,MAAM,KAAK,SAAS,EAAE;QAC7B,MAAM,IAAI,CAACV,MAAM,CAACe,KAAK,CAAC,CAAC;QACzB,OAAOL,MAAM;MACjB,CAAC,MAAM,IAAIA,MAAM,KAAK,UAAU,EAAE;QAC9B,OAAOA,MAAM;MACjB;MACAJ,SAAS,EAAE;MAEX,MAAMU,OAAO,GAAG,IAAIC,OAAO,CAAC,CAAC;MAE7B,IAAI,IAAI,CAAChB,MAAM,CAACiB,MAAM,GAAG,CAAC,EAAE;QACxBF,OAAO,CAACG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"names":["_sizeSegments","require","DownloadFileFromUrl","constructor","params","file","fetch","nextRange","upload","ranges","createSizeSegments","size","process","onIteration","iteration","next","isDone","complete","status","undefined","segment","stop","input","abort","headers","Headers","length","set","start","end","result","url","method","keepalive","mode","ok","Error","body","buffer","arrayBuffer","add","Buffer","from","getNextRange","exports","createDownloadFileFromUrl"],"sources":["DownloadFileFromUrl.ts"],"sourcesContent":["import type { IMultipartUploadHandler } from \"~/tasks/utils/upload\";\nimport type {\n IDownloadFileFromUrl,\n IDownloadFileFromUrlProcessOnIterationCallable,\n IDownloadFileFromUrlProcessResponseType\n} from \"./abstractions/DownloadFileFromUrl\";\nimport { createSizeSegments } from \"~/tasks/utils/helpers/sizeSegments\";\n\nexport interface IDownloadFileFromUrlFile {\n url: string;\n size: number;\n key: string;\n}\n\ninterface IRange {\n start: number;\n end: number;\n}\n\nexport interface IDownloadFileFromUrlParams {\n file: IDownloadFileFromUrlFile;\n fetch: typeof fetch;\n upload: IMultipartUploadHandler;\n nextRange?: number;\n}\n\nexport class DownloadFileFromUrl implements IDownloadFileFromUrl {\n private readonly file: IDownloadFileFromUrlFile;\n private readonly upload: IMultipartUploadHandler;\n private readonly fetch: typeof fetch;\n private nextRange: number;\n private readonly ranges: IRange[];\n\n public constructor(params: IDownloadFileFromUrlParams) {\n this.file = params.file;\n this.fetch = params.fetch;\n this.nextRange = params.nextRange || 0;\n this.upload = params.upload;\n this.ranges = createSizeSegments(this.file.size, \"10MB\");\n }\n\n public async process<T extends string>(\n onIteration: IDownloadFileFromUrlProcessOnIterationCallable<T>\n ): Promise<IDownloadFileFromUrlProcessResponseType<T>> {\n let iteration = 0;\n\n while (true) {\n const next = this.ranges[this.nextRange];\n\n if (this.isDone() || !next) {\n await this.upload.complete();\n return \"done\";\n }\n let status: IDownloadFileFromUrlProcessResponseType<T> | undefined = undefined;\n await onIteration({\n iteration,\n next: this.nextRange,\n segment: next,\n stop: input => {\n status = input;\n }\n });\n if (status === \"done\") {\n await this.upload.complete();\n return status;\n } else if (status === \"aborted\") {\n await this.upload.abort();\n return status;\n } else if (status === \"continue\") {\n return status;\n }\n iteration++;\n\n const headers = new Headers();\n\n if (this.ranges.length > 1) {\n headers.set(\"Range\", `bytes=${next.start}-${next.end}`);\n }\n const result = await this.fetch(this.file.url, {\n method: \"GET\",\n keepalive: true,\n mode: \"cors\",\n headers\n });\n if (!result.ok) {\n throw new Error(`Failed to fetch URL: ${this.file.url}`);\n } else if (!result.body) {\n throw new Error(`Body not found for URL: ${this.file.url}`);\n }\n const buffer = await result.arrayBuffer();\n\n await this.upload.add(Buffer.from(buffer));\n this.nextRange++;\n }\n }\n\n public async abort(): Promise<void> {\n await this.upload.abort();\n }\n\n public getNextRange(): number {\n return this.nextRange;\n }\n\n public isDone(): boolean {\n return !this.ranges[this.nextRange];\n }\n}\n\nexport const createDownloadFileFromUrl = (\n params: IDownloadFileFromUrlParams\n): IDownloadFileFromUrl => {\n return new DownloadFileFromUrl(params);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_cmsEntryFetcher","require","_entryAssets","_cmsAssetsZipper","_fileFetcher","_utils","_getBucket","_s3Client","_UniqueResolver","_constants","getFilename","input","current","entryAfter","fileAfter","filter","item","undefined","join","prefix","WEBINY_EXPORT_ASSETS_EXTENSION","ExportContentAssets","constructor","params","createCmsAssetsZipper","run","response","context","isCloseToTimeout","isAborted","model","cms","getModel","modelId","ex","error","message","code","data","getErrorProperties","traverser","getEntryTraverser","entryFetcher","createCmsEntryFetcher","after","where","limit","sort","items","meta","listLatestEntries","fileFetcher","FileFetcher","client","createS3Client","bucket","getBucket","filename","zipper","createEntryAssets","EntryAssets","uniqueResolver","UniqueResolver","createEntryAssetsResolver","EntryAssetsResolver","fetchFiles","fileManager","listFiles","result","execute","seconds","files","Array","isArray","CmsAssetsZipperExecuteDoneWithoutResult","done","CmsAssetsZipperExecuteDoneResult","concat","key","checksum","CmsAssetsZipperExecuteContinueWithoutResult","continue","fileCursor","entryCursor","CmsAssetsZipperExecuteContinueResult","type","name","exports"],"sources":["ExportContentAssets.ts"],"sourcesContent":["import type { Context } from \"~/types\";\nimport type {\n IExportContentAssets,\n IExportContentAssetsInput,\n IExportContentAssetsOutput\n} from \"~/tasks/domain/abstractions/ExportContentAssets\";\nimport type { ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport type { ICmsEntryFetcher } from \"~/tasks/utils/cmsEntryFetcher\";\nimport { createCmsEntryFetcher } from \"~/tasks/utils/cmsEntryFetcher\";\nimport type { IEntryAssets, IEntryAssetsResolver } from \"~/tasks/utils/entryAssets\";\nimport { EntryAssets, EntryAssetsResolver } from \"~/tasks/utils/entryAssets\";\nimport type {\n ICmsAssetsZipper,\n ICmsAssetsZipperExecuteResult\n} from \"~/tasks/utils/cmsAssetsZipper\";\nimport {\n CmsAssetsZipperExecuteContinueResult,\n CmsAssetsZipperExecuteContinueWithoutResult,\n CmsAssetsZipperExecuteDoneResult,\n CmsAssetsZipperExecuteDoneWithoutResult\n} from \"~/tasks/utils/cmsAssetsZipper\";\nimport type { IFileFetcher } from \"~/tasks/utils/fileFetcher\";\nimport { FileFetcher } from \"~/tasks/utils/fileFetcher\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { getErrorProperties } from \"@webiny/tasks/utils\";\nimport { getBucket } from \"~/tasks/utils/helpers/getBucket\";\nimport { createS3Client } from \"~/tasks/utils/helpers/s3Client\";\nimport { UniqueResolver } from \"~/tasks/utils/uniqueResolver/UniqueResolver\";\nimport { WEBINY_EXPORT_ASSETS_EXTENSION } from \"~/tasks/constants\";\n\nexport interface ICreateCmsAssetsZipperCallableConfig {\n filename: string;\n entryFetcher: ICmsEntryFetcher;\n createEntryAssets: () => IEntryAssets;\n createEntryAssetsResolver: () => IEntryAssetsResolver;\n fileFetcher: IFileFetcher;\n}\n\nexport interface ICreateCmsAssetsZipperCallable {\n (config: ICreateCmsAssetsZipperCallableConfig): ICmsAssetsZipper;\n}\n\nconst getFilename = (input: IExportContentAssetsInput): string => {\n const current = [input.entryAfter, input.fileAfter]\n .filter(item => item !== undefined)\n .join(\"-\");\n\n return `${input.prefix}/assets${\n current ? `-${current}` : \"\"\n }.${WEBINY_EXPORT_ASSETS_EXTENSION}`;\n};\n\nexport interface IExportContentAssetsParams {\n createCmsAssetsZipper: ICreateCmsAssetsZipperCallable;\n}\n\nexport class ExportContentAssets<\n C extends Context = Context,\n I extends IExportContentAssetsInput = IExportContentAssetsInput,\n O extends IExportContentAssetsOutput = IExportContentAssetsOutput\n> implements IExportContentAssets<C, I, O>\n{\n private readonly createCmsAssetsZipper: ICreateCmsAssetsZipperCallable;\n\n public constructor(params: IExportContentAssetsParams) {\n this.createCmsAssetsZipper = params.createCmsAssetsZipper;\n }\n\n public async run(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { response, context, input, isCloseToTimeout, isAborted } = params;\n\n let model: CmsModel;\n try {\n model = await context.cms.getModel(input.modelId);\n } catch (ex) {\n return response.error({\n message: `Could not fetch entry manager for model \"${input.modelId}\".`,\n code: \"MODEL_NOT_FOUND\",\n data: {\n error: getErrorProperties(ex)\n }\n });\n }\n\n const traverser = await context.cms.getEntryTraverser(model.modelId);\n\n const entryFetcher = createCmsEntryFetcher(async after => {\n const input = {\n where: params.input.where,\n limit: params.input.limit || 10000,\n sort: params.input.sort,\n after\n };\n const [items, meta] = await context.cms.listLatestEntries(model, input);\n\n return {\n items,\n meta\n };\n });\n\n const fileFetcher = new FileFetcher({\n client: createS3Client(),\n bucket: getBucket()\n });\n\n const filename = getFilename(input);\n\n const zipper = this.createCmsAssetsZipper({\n filename,\n fileFetcher,\n entryFetcher,\n createEntryAssets: () => {\n return new EntryAssets({\n traverser,\n uniqueResolver: new UniqueResolver()\n });\n },\n createEntryAssetsResolver: () => {\n return new EntryAssetsResolver({\n fetchFiles: async params => {\n const [items, meta] = await context.fileManager.listFiles(params);\n return {\n items,\n meta\n };\n }\n });\n }\n });\n\n let result: ICmsAssetsZipperExecuteResult;\n\n try {\n result = await zipper.execute({\n fileAfter: input.fileAfter,\n entryAfter: input.entryAfter,\n isAborted() {\n return isAborted();\n },\n isCloseToTimeout(seconds?: number) {\n return isCloseToTimeout(seconds);\n }\n });\n } catch (ex) {\n return response.error(ex);\n }\n\n const files = Array.isArray(input.files) ? input.files : [];\n /**\n * Zipper is done, but there is no result?\n * We will output existing input files.\n */\n if (result instanceof CmsAssetsZipperExecuteDoneWithoutResult) {\n return response.done({\n files\n } as O);\n }\n /**\n * Zipper is done and there is a result?\n * We will output existing input files and the new file.\n */\n //\n else if (result instanceof CmsAssetsZipperExecuteDoneResult) {\n return response.done({\n files: files.concat([\n {\n key: result.key,\n checksum: result.checksum\n }\n ])\n } as O);\n }\n /**\n * Zipper is not done and there is no result?\n * Let's continue with the next iteration.\n */\n //\n else if (result instanceof CmsAssetsZipperExecuteContinueWithoutResult) {\n return response.continue({\n ...input,\n fileAfter: result.fileCursor,\n entryAfter: result.entryCursor\n });\n }\n /**\n * Zipper is not done and there is a result?\n * Let's merge the existing files with the new file and continue with the next iteration.\n */\n //\n else if (result instanceof CmsAssetsZipperExecuteContinueResult) {\n return response.continue({\n ...input,\n fileAfter: result.fileCursor,\n entryAfter: result.entryCursor,\n files: files.concat([\n {\n key: result.key,\n checksum: result.checksum\n }\n ])\n });\n }\n\n return response.error({\n message: \"Unknown zipper result.\",\n code: \"UNKNOWN_ZIPPER_RESULT\",\n data: {\n type: typeof result,\n constructor: result?.constructor?.name || \"unknown constructor\",\n result\n }\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_cmsEntryFetcher","require","_entryAssets","_cmsAssetsZipper","_fileFetcher","_utils","_getBucket","_s3Client","_UniqueResolver","_constants","getFilename","input","current","entryAfter","fileAfter","filter","item","undefined","join","prefix","WEBINY_EXPORT_ASSETS_EXTENSION","ExportContentAssets","constructor","params","createCmsAssetsZipper","run","response","context","isCloseToTimeout","isAborted","model","cms","getModel","modelId","ex","error","message","code","data","getErrorProperties","traverser","getEntryTraverser","entryFetcher","createCmsEntryFetcher","after","where","limit","sort","items","meta","listLatestEntries","fileFetcher","FileFetcher","client","createS3Client","bucket","getBucket","filename","zipper","createEntryAssets","EntryAssets","uniqueResolver","UniqueResolver","createEntryAssetsResolver","EntryAssetsResolver","fetchFiles","fileManager","listFiles","result","execute","seconds","files","Array","isArray","CmsAssetsZipperExecuteDoneWithoutResult","done","CmsAssetsZipperExecuteDoneResult","concat","key","checksum","CmsAssetsZipperExecuteContinueWithoutResult","continue","fileCursor","entryCursor","CmsAssetsZipperExecuteContinueResult","type","name","exports"],"sources":["ExportContentAssets.ts"],"sourcesContent":["import type { Context } from \"~/types\";\nimport type {\n IExportContentAssets,\n IExportContentAssetsInput,\n IExportContentAssetsOutput\n} from \"~/tasks/domain/abstractions/ExportContentAssets\";\nimport type { ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport type { ICmsEntryFetcher } from \"~/tasks/utils/cmsEntryFetcher\";\nimport { createCmsEntryFetcher } from \"~/tasks/utils/cmsEntryFetcher\";\nimport type { IEntryAssets, IEntryAssetsResolver } from \"~/tasks/utils/entryAssets\";\nimport { EntryAssets, EntryAssetsResolver } from \"~/tasks/utils/entryAssets\";\nimport type {\n ICmsAssetsZipper,\n ICmsAssetsZipperExecuteResult\n} from \"~/tasks/utils/cmsAssetsZipper\";\nimport {\n CmsAssetsZipperExecuteContinueResult,\n CmsAssetsZipperExecuteContinueWithoutResult,\n CmsAssetsZipperExecuteDoneResult,\n CmsAssetsZipperExecuteDoneWithoutResult\n} from \"~/tasks/utils/cmsAssetsZipper\";\nimport type { IFileFetcher } from \"~/tasks/utils/fileFetcher\";\nimport { FileFetcher } from \"~/tasks/utils/fileFetcher\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { getErrorProperties } from \"@webiny/tasks/utils\";\nimport { getBucket } from \"~/tasks/utils/helpers/getBucket\";\nimport { createS3Client } from \"~/tasks/utils/helpers/s3Client\";\nimport { UniqueResolver } from \"~/tasks/utils/uniqueResolver/UniqueResolver\";\nimport { WEBINY_EXPORT_ASSETS_EXTENSION } from \"~/tasks/constants\";\n\nexport interface ICreateCmsAssetsZipperCallableConfig {\n filename: string;\n entryFetcher: ICmsEntryFetcher;\n createEntryAssets: () => IEntryAssets;\n createEntryAssetsResolver: () => IEntryAssetsResolver;\n fileFetcher: IFileFetcher;\n}\n\nexport interface ICreateCmsAssetsZipperCallable {\n (config: ICreateCmsAssetsZipperCallableConfig): ICmsAssetsZipper;\n}\n\nconst getFilename = (input: IExportContentAssetsInput): string => {\n const current = [input.entryAfter, input.fileAfter]\n .filter(item => item !== undefined)\n .join(\"-\");\n\n return `${input.prefix}/assets${\n current ? `-${current}` : \"\"\n }.${WEBINY_EXPORT_ASSETS_EXTENSION}`;\n};\n\nexport interface IExportContentAssetsParams {\n createCmsAssetsZipper: ICreateCmsAssetsZipperCallable;\n}\n\nexport class ExportContentAssets<\n C extends Context = Context,\n I extends IExportContentAssetsInput = IExportContentAssetsInput,\n O extends IExportContentAssetsOutput = IExportContentAssetsOutput\n> implements IExportContentAssets<C, I, O>\n{\n private readonly createCmsAssetsZipper: ICreateCmsAssetsZipperCallable;\n\n public constructor(params: IExportContentAssetsParams) {\n this.createCmsAssetsZipper = params.createCmsAssetsZipper;\n }\n\n public async run(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { response, context, input, isCloseToTimeout, isAborted } = params;\n\n let model: CmsModel;\n try {\n model = await context.cms.getModel(input.modelId);\n } catch (ex) {\n return response.error({\n message: `Could not fetch entry manager for model \"${input.modelId}\".`,\n code: \"MODEL_NOT_FOUND\",\n data: {\n error: getErrorProperties(ex)\n }\n });\n }\n\n const traverser = await context.cms.getEntryTraverser(model.modelId);\n\n const entryFetcher = createCmsEntryFetcher(async after => {\n const input = {\n where: params.input.where,\n limit: params.input.limit || 10000,\n sort: params.input.sort,\n after\n };\n const [items, meta] = await context.cms.listLatestEntries(model, input);\n\n return {\n items,\n meta\n };\n });\n\n const fileFetcher = new FileFetcher({\n client: createS3Client(),\n bucket: getBucket()\n });\n\n const filename = getFilename(input);\n\n const zipper = this.createCmsAssetsZipper({\n filename,\n fileFetcher,\n entryFetcher,\n createEntryAssets: () => {\n return new EntryAssets({\n traverser,\n uniqueResolver: new UniqueResolver()\n });\n },\n createEntryAssetsResolver: () => {\n return new EntryAssetsResolver({\n fetchFiles: async params => {\n const [items, meta] = await context.fileManager.listFiles(params);\n return {\n items,\n meta\n };\n }\n });\n }\n });\n\n let result: ICmsAssetsZipperExecuteResult;\n\n try {\n result = await zipper.execute({\n fileAfter: input.fileAfter,\n entryAfter: input.entryAfter,\n isAborted() {\n return isAborted();\n },\n isCloseToTimeout(seconds?: number) {\n return isCloseToTimeout(seconds);\n }\n });\n } catch (ex) {\n return response.error(ex);\n }\n\n const files = Array.isArray(input.files) ? input.files : [];\n /**\n * Zipper is done, but there is no result?\n * We will output existing input files.\n */\n if (result instanceof CmsAssetsZipperExecuteDoneWithoutResult) {\n return response.done({\n files\n } as O);\n }\n /**\n * Zipper is done and there is a result?\n * We will output existing input files and the new file.\n */\n //\n else if (result instanceof CmsAssetsZipperExecuteDoneResult) {\n return response.done({\n files: files.concat([\n {\n key: result.key,\n checksum: result.checksum\n }\n ])\n } as O);\n }\n /**\n * Zipper is not done and there is no result?\n * Let's continue with the next iteration.\n */\n //\n else if (result instanceof CmsAssetsZipperExecuteContinueWithoutResult) {\n return response.continue({\n ...input,\n fileAfter: result.fileCursor,\n entryAfter: result.entryCursor\n });\n }\n /**\n * Zipper is not done and there is a result?\n * Let's merge the existing files with the new file and continue with the next iteration.\n */\n //\n else if (result instanceof CmsAssetsZipperExecuteContinueResult) {\n return response.continue({\n ...input,\n fileAfter: result.fileCursor,\n entryAfter: result.entryCursor,\n files: files.concat([\n {\n key: result.key,\n checksum: result.checksum\n }\n ])\n });\n }\n\n return response.error({\n message: \"Unknown zipper result.\",\n code: \"UNKNOWN_ZIPPER_RESULT\",\n data: {\n type: typeof result,\n constructor: result?.constructor?.name || \"unknown constructor\",\n result\n }\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_utils","require","_cmsEntryZipper","_createCmsEntryFetcher","_constants","ExportContentEntries","constructor","config","createCmsEntryZipper","run","params","context","response","input","isCloseToTimeout","isAborted","prefix","basePrefix","model","cms","getModel","modelId","ex","error","message","code","data","getErrorProperties","fetcher","createCmsEntryFetcher","after","where","limit","sort","items","meta","listLatestEntries","filenamePrefix","filter","Boolean","join","filename","WEBINY_EXPORT_ENTRIES_EXTENSION","traverser","getEntryTraverser","entryZipper","result","execute","exportAssets","files","concat","key","checksum","CmsEntryZipperExecuteContinueResult","continue","cursor","output","done","exports"],"sources":["ExportContentEntries.ts"],"sourcesContent":["import type { ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport type { Context } from \"~/types\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { getErrorProperties } from \"@webiny/tasks/utils\";\nimport type { ICmsEntryZipper, ICmsEntryZipperConfig } from \"~/tasks/utils/cmsEntryZipper\";\nimport { CmsEntryZipperExecuteContinueResult } from \"~/tasks/utils/cmsEntryZipper\";\nimport type {\n IExportContentEntries,\n IExportContentEntriesInput,\n IExportContentEntriesOutput\n} from \"~/tasks/domain/abstractions/ExportContentEntries\";\nimport { createCmsEntryFetcher } from \"~/tasks/utils/cmsEntryFetcher/createCmsEntryFetcher\";\nimport type { IContentEntryTraverser } from \"@webiny/api-headless-cms\";\nimport { WEBINY_EXPORT_ENTRIES_EXTENSION } from \"~/tasks/constants\";\n\nexport interface IExportContentEntriesConfig {\n createCmsEntryZipper(config: Pick<ICmsEntryZipperConfig, \"fetcher\">): ICmsEntryZipper;\n}\n\nexport interface ICreateCmsEntryZipperConfig extends Pick<ICmsEntryZipperConfig, \"fetcher\"> {\n filename: string;\n model: Pick<CmsModel, \"modelId\">;\n traverser: IContentEntryTraverser;\n}\n\nexport class ExportContentEntries<\n C extends Context = Context,\n I extends IExportContentEntriesInput = IExportContentEntriesInput,\n O extends IExportContentEntriesOutput = IExportContentEntriesOutput\n> implements IExportContentEntries<C, I, O>\n{\n private readonly createCmsEntryZipper: (config: ICreateCmsEntryZipperConfig) => ICmsEntryZipper;\n\n public constructor(config: IExportContentEntriesConfig) {\n this.createCmsEntryZipper = config.createCmsEntryZipper;\n }\n\n public async run(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { context, response, input, isCloseToTimeout, isAborted } = params;\n\n const { prefix: basePrefix } = input;\n\n let model: CmsModel;\n try {\n model = await context.cms.getModel(input.modelId);\n } catch (ex) {\n return response.error({\n message: `Could not fetch entry manager for model \"${input.modelId}\".`,\n code: \"MODEL_NOT_FOUND\",\n data: {\n error: getErrorProperties(ex)\n }\n });\n }\n\n const prefix = `${basePrefix}/entries`;\n const fetcher = createCmsEntryFetcher(async after => {\n const input = {\n where: params.input.where,\n limit: params.input.limit || 100000,\n sort: params.input.sort,\n after\n };\n const [items, meta] = await context.cms.listLatestEntries(model, input);\n\n return {\n items,\n meta\n };\n });\n\n const filenamePrefix = [prefix, input.after].filter(Boolean).join(\"-\");\n\n const filename = `${filenamePrefix}.${WEBINY_EXPORT_ENTRIES_EXTENSION}`;\n\n const traverser = await context.cms.getEntryTraverser(model.modelId);\n\n const entryZipper = this.createCmsEntryZipper({\n filename,\n model,\n fetcher,\n traverser\n });\n\n const result = await entryZipper.execute({\n isCloseToTimeout,\n isAborted,\n model,\n after: input.after,\n exportAssets: input.exportAssets\n });\n\n const files = (input.files || []).concat([\n {\n key: result.key,\n checksum: result.checksum\n }\n ]);\n\n if (result instanceof CmsEntryZipperExecuteContinueResult) {\n return response.continue({\n ...input,\n files,\n after: result.cursor\n });\n }\n const output: IExportContentEntriesOutput = {\n files\n };\n return response.done(output as O);\n }\n}\n"],"mappings":";;;;;;AAGA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AAMA,IAAAE,sBAAA,GAAAF,OAAA;AAEA,IAAAG,UAAA,GAAAH,OAAA;AAYO,MAAMI,oBAAoB,CAKjC;EAGWC,WAAWA,CAACC,MAAmC,EAAE;IACpD,IAAI,CAACC,oBAAoB,GAAGD,MAAM,CAACC,oBAAoB;EAC3D;EAEA,MAAaC,GAAGA,CAACC,MAA+B,EAAsC;IAClF,MAAM;MAAEC,OAAO;MAAEC,QAAQ;MAAEC,KAAK;MAAEC,gBAAgB;MAAEC;IAAU,CAAC,GAAGL,MAAM;IAExE,MAAM;MAAEM,MAAM,EAAEC;IAAW,CAAC,GAAGJ,KAAK;IAEpC,IAAIK,KAAe;IACnB,IAAI;MACAA,KAAK,GAAG,MAAMP,OAAO,CAACQ,GAAG,CAACC,QAAQ,CAACP,KAAK,CAACQ,OAAO,CAAC;IACrD,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,OAAOV,QAAQ,CAACW,KAAK,CAAC;QAClBC,OAAO,
|
|
1
|
+
{"version":3,"names":["_utils","require","_cmsEntryZipper","_createCmsEntryFetcher","_constants","ExportContentEntries","constructor","config","createCmsEntryZipper","run","params","context","response","input","isCloseToTimeout","isAborted","prefix","basePrefix","model","cms","getModel","modelId","ex","error","message","code","data","getErrorProperties","fetcher","createCmsEntryFetcher","after","where","limit","sort","items","meta","listLatestEntries","filenamePrefix","filter","Boolean","join","filename","WEBINY_EXPORT_ENTRIES_EXTENSION","traverser","getEntryTraverser","entryZipper","result","execute","exportAssets","files","concat","key","checksum","CmsEntryZipperExecuteContinueResult","continue","cursor","output","done","exports"],"sources":["ExportContentEntries.ts"],"sourcesContent":["import type { ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport type { Context } from \"~/types\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { getErrorProperties } from \"@webiny/tasks/utils\";\nimport type { ICmsEntryZipper, ICmsEntryZipperConfig } from \"~/tasks/utils/cmsEntryZipper\";\nimport { CmsEntryZipperExecuteContinueResult } from \"~/tasks/utils/cmsEntryZipper\";\nimport type {\n IExportContentEntries,\n IExportContentEntriesInput,\n IExportContentEntriesOutput\n} from \"~/tasks/domain/abstractions/ExportContentEntries\";\nimport { createCmsEntryFetcher } from \"~/tasks/utils/cmsEntryFetcher/createCmsEntryFetcher\";\nimport type { IContentEntryTraverser } from \"@webiny/api-headless-cms\";\nimport { WEBINY_EXPORT_ENTRIES_EXTENSION } from \"~/tasks/constants\";\n\nexport interface IExportContentEntriesConfig {\n createCmsEntryZipper(config: Pick<ICmsEntryZipperConfig, \"fetcher\">): ICmsEntryZipper;\n}\n\nexport interface ICreateCmsEntryZipperConfig extends Pick<ICmsEntryZipperConfig, \"fetcher\"> {\n filename: string;\n model: Pick<CmsModel, \"modelId\">;\n traverser: IContentEntryTraverser;\n}\n\nexport class ExportContentEntries<\n C extends Context = Context,\n I extends IExportContentEntriesInput = IExportContentEntriesInput,\n O extends IExportContentEntriesOutput = IExportContentEntriesOutput\n> implements IExportContentEntries<C, I, O>\n{\n private readonly createCmsEntryZipper: (config: ICreateCmsEntryZipperConfig) => ICmsEntryZipper;\n\n public constructor(config: IExportContentEntriesConfig) {\n this.createCmsEntryZipper = config.createCmsEntryZipper;\n }\n\n public async run(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { context, response, input, isCloseToTimeout, isAborted } = params;\n\n const { prefix: basePrefix } = input;\n\n let model: CmsModel;\n try {\n model = await context.cms.getModel(input.modelId);\n } catch (ex) {\n return response.error({\n message: `Could not fetch entry manager for model \"${input.modelId}\".`,\n code: \"MODEL_NOT_FOUND\",\n data: {\n error: getErrorProperties(ex)\n }\n });\n }\n\n const prefix = `${basePrefix}/entries`;\n const fetcher = createCmsEntryFetcher(async after => {\n const input = {\n where: params.input.where,\n limit: params.input.limit || 100000,\n sort: params.input.sort,\n after\n };\n const [items, meta] = await context.cms.listLatestEntries(model, input);\n\n return {\n items,\n meta\n };\n });\n\n const filenamePrefix = [prefix, input.after].filter(Boolean).join(\"-\");\n\n const filename = `${filenamePrefix}.${WEBINY_EXPORT_ENTRIES_EXTENSION}`;\n\n const traverser = await context.cms.getEntryTraverser(model.modelId);\n\n const entryZipper = this.createCmsEntryZipper({\n filename,\n model,\n fetcher,\n traverser\n });\n\n const result = await entryZipper.execute({\n isCloseToTimeout,\n isAborted,\n model,\n after: input.after,\n exportAssets: input.exportAssets\n });\n\n const files = (input.files || []).concat([\n {\n key: result.key,\n checksum: result.checksum\n }\n ]);\n\n if (result instanceof CmsEntryZipperExecuteContinueResult) {\n return response.continue({\n ...input,\n files,\n after: result.cursor\n });\n }\n const output: IExportContentEntriesOutput = {\n files\n };\n return response.done(output as O);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/tasks/domain/importFromUrlControllerSteps/ImportFromUrlControllerDownloadStep.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_constants","require","_getBackOffSeconds","_types","_ImportFromUrlController","_getChildTasks","ImportFromUrlControllerDownloadStep","execute","params","context","response","input","trigger","store","task","getTask","step","steps","IImportFromUrlControllerInputStep","DOWNLOAD","triggered","files","filter","file","type","CmsImportExportFileType","ENTRIES","ASSETS","length","error","message","code","name","definition","IMPORT_FROM_URL_DOWNLOAD_TASK","modelId","output","continue","seconds","getBackOffSeconds","iterations","finished","failed","running","invalid","aborted","done","collection","getChildTasks","map","item","data","exports"],"sources":["ImportFromUrlControllerDownloadStep.ts"],"sourcesContent":["import type { ImportFromUrlControllerStep } from \"./abstractions/ImportFromUrlControllerStep\";\nimport type {\n IImportFromUrlDownloadInput,\n IImportFromUrlDownloadOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlDownload\";\nimport { IMPORT_FROM_URL_DOWNLOAD_TASK } from \"~/tasks/constants\";\nimport { getBackOffSeconds } from \"~/tasks/utils/helpers/getBackOffSeconds\";\nimport { CmsImportExportFileType, Context } from \"~/types\";\nimport type {\n IImportFromUrlControllerInput,\n IImportFromUrlControllerOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlController\";\nimport { IImportFromUrlControllerInputStep } from \"~/tasks/domain/abstractions/ImportFromUrlController\";\nimport type { ITask, ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport { getChildTasks } from \"./getChildTasks\";\n\nexport class ImportFromUrlControllerDownloadStep<\n C extends Context = Context,\n I extends IImportFromUrlControllerInput = IImportFromUrlControllerInput,\n O extends IImportFromUrlControllerOutput = IImportFromUrlControllerOutput\n> implements ImportFromUrlControllerStep<C, I, O>\n{\n public async execute(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { context, response, input, trigger, store } = params;\n\n const task = store.getTask() as ITask<I, O>;\n\n const step = input.steps[IImportFromUrlControllerInputStep.DOWNLOAD];\n if (!step?.triggered) {\n const files = input.files.filter(file => {\n return (\n file.type === CmsImportExportFileType.ENTRIES ||\n file.type === CmsImportExportFileType.ASSETS\n );\n });\n if (files.length === 0) {\n return response.error({\n message: `No files found in the provided data.`,\n code: \"NO_FILES_FOUND\"\n });\n }\n for (const file of files) {\n await trigger<IImportFromUrlDownloadInput>({\n name: `Import From Url - Download`,\n definition: IMPORT_FROM_URL_DOWNLOAD_TASK,\n input: {\n file,\n modelId: input.modelId\n }\n });\n }\n\n const output: I = {\n ...input,\n steps: {\n ...input.steps,\n [IImportFromUrlControllerInputStep.DOWNLOAD]: {\n ...step,\n triggered: true\n }\n }\n };\n\n return response.continue(output, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (step.finished !== true) {\n const { failed, running, invalid, aborted, done, collection } = await getChildTasks<\n IImportFromUrlDownloadInput,\n IImportFromUrlDownloadOutput\n >({\n context,\n task,\n definition: IMPORT_FROM_URL_DOWNLOAD_TASK\n });\n\n /**\n * If there are any running tasks, we should continue waiting.\n */\n if (running.length > 0) {\n return response.continue(input, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (collection.length === 0) {\n return response.error({\n message: \"No download tasks found. We are not continuing.\",\n code: \"NO_DOWNLOAD_TASKS\"\n });\n }\n\n const files = collection\n .map(item => {\n return item.output?.file;\n })\n .filter((file): file is string => {\n return !!file;\n });\n\n const output: I = {\n ...input,\n steps: {\n ...input.steps,\n [IImportFromUrlControllerInputStep.DOWNLOAD]: {\n ...step,\n files,\n failed,\n invalid,\n aborted,\n done,\n finished: true\n }\n }\n };\n\n if (failed.length > 0 || aborted.length > 0 || invalid.length > 0) {\n return response.error({\n message: \"Some download tasks failed.\",\n code: \"DOWNLOAD_FAILED\",\n data: {\n failed,\n aborted,\n invalid\n }\n });\n }\n\n return response.continue(output);\n }\n return response.error({\n message: \"Impossible to get to this point. Fatal error.\"\n });\n }\n}\n"],"mappings":";;;;;;AAKA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAKA,IAAAG,wBAAA,GAAAH,OAAA;AAEA,IAAAI,cAAA,GAAAJ,OAAA;AAEO,MAAMK,mCAAmC,CAKhD;EACI,MAAaC,OAAOA,CAACC,MAA+B,EAAsC;IACtF,MAAM;MAAEC,OAAO;MAAEC,QAAQ;MAAEC,KAAK;MAAEC,OAAO;MAAEC;IAAM,CAAC,GAAGL,MAAM;IAE3D,MAAMM,IAAI,GAAGD,KAAK,CAACE,OAAO,CAAC,CAAgB;IAE3C,MAAMC,IAAI,GAAGL,KAAK,CAACM,KAAK,CAACC,0DAAiC,CAACC,QAAQ,CAAC;IACpE,IAAI,CAACH,IAAI,EAAEI,SAAS,EAAE;MAClB,MAAMC,KAAK,GAAGV,KAAK,CAACU,KAAK,CAACC,MAAM,CAACC,IAAI,IAAI;QACrC,OACIA,IAAI,CAACC,IAAI,KAAKC,8BAAuB,CAACC,OAAO,IAC7CH,IAAI,CAACC,IAAI,KAAKC,8BAAuB,CAACE,MAAM;MAEpD,CAAC,CAAC;MACF,IAAIN,KAAK,CAACO,MAAM,KAAK,CAAC,EAAE;QACpB,OAAOlB,QAAQ,CAACmB,KAAK,CAAC;UAClBC,OAAO,
|
|
1
|
+
{"version":3,"names":["_constants","require","_getBackOffSeconds","_types","_ImportFromUrlController","_getChildTasks","ImportFromUrlControllerDownloadStep","execute","params","context","response","input","trigger","store","task","getTask","step","steps","IImportFromUrlControllerInputStep","DOWNLOAD","triggered","files","filter","file","type","CmsImportExportFileType","ENTRIES","ASSETS","length","error","message","code","name","definition","IMPORT_FROM_URL_DOWNLOAD_TASK","modelId","output","continue","seconds","getBackOffSeconds","iterations","finished","failed","running","invalid","aborted","done","collection","getChildTasks","map","item","data","exports"],"sources":["ImportFromUrlControllerDownloadStep.ts"],"sourcesContent":["import type { ImportFromUrlControllerStep } from \"./abstractions/ImportFromUrlControllerStep\";\nimport type {\n IImportFromUrlDownloadInput,\n IImportFromUrlDownloadOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlDownload\";\nimport { IMPORT_FROM_URL_DOWNLOAD_TASK } from \"~/tasks/constants\";\nimport { getBackOffSeconds } from \"~/tasks/utils/helpers/getBackOffSeconds\";\nimport { CmsImportExportFileType, Context } from \"~/types\";\nimport type {\n IImportFromUrlControllerInput,\n IImportFromUrlControllerOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlController\";\nimport { IImportFromUrlControllerInputStep } from \"~/tasks/domain/abstractions/ImportFromUrlController\";\nimport type { ITask, ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport { getChildTasks } from \"./getChildTasks\";\n\nexport class ImportFromUrlControllerDownloadStep<\n C extends Context = Context,\n I extends IImportFromUrlControllerInput = IImportFromUrlControllerInput,\n O extends IImportFromUrlControllerOutput = IImportFromUrlControllerOutput\n> implements ImportFromUrlControllerStep<C, I, O>\n{\n public async execute(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { context, response, input, trigger, store } = params;\n\n const task = store.getTask() as ITask<I, O>;\n\n const step = input.steps[IImportFromUrlControllerInputStep.DOWNLOAD];\n if (!step?.triggered) {\n const files = input.files.filter(file => {\n return (\n file.type === CmsImportExportFileType.ENTRIES ||\n file.type === CmsImportExportFileType.ASSETS\n );\n });\n if (files.length === 0) {\n return response.error({\n message: `No files found in the provided data.`,\n code: \"NO_FILES_FOUND\"\n });\n }\n for (const file of files) {\n await trigger<IImportFromUrlDownloadInput>({\n name: `Import From Url - Download`,\n definition: IMPORT_FROM_URL_DOWNLOAD_TASK,\n input: {\n file,\n modelId: input.modelId\n }\n });\n }\n\n const output: I = {\n ...input,\n steps: {\n ...input.steps,\n [IImportFromUrlControllerInputStep.DOWNLOAD]: {\n ...step,\n triggered: true\n }\n }\n };\n\n return response.continue(output, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (step.finished !== true) {\n const { failed, running, invalid, aborted, done, collection } = await getChildTasks<\n IImportFromUrlDownloadInput,\n IImportFromUrlDownloadOutput\n >({\n context,\n task,\n definition: IMPORT_FROM_URL_DOWNLOAD_TASK\n });\n\n /**\n * If there are any running tasks, we should continue waiting.\n */\n if (running.length > 0) {\n return response.continue(input, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (collection.length === 0) {\n return response.error({\n message: \"No download tasks found. We are not continuing.\",\n code: \"NO_DOWNLOAD_TASKS\"\n });\n }\n\n const files = collection\n .map(item => {\n return item.output?.file;\n })\n .filter((file): file is string => {\n return !!file;\n });\n\n const output: I = {\n ...input,\n steps: {\n ...input.steps,\n [IImportFromUrlControllerInputStep.DOWNLOAD]: {\n ...step,\n files,\n failed,\n invalid,\n aborted,\n done,\n finished: true\n }\n }\n };\n\n if (failed.length > 0 || aborted.length > 0 || invalid.length > 0) {\n return response.error({\n message: \"Some download tasks failed.\",\n code: \"DOWNLOAD_FAILED\",\n data: {\n failed,\n aborted,\n invalid\n }\n });\n }\n\n return response.continue(output);\n }\n return response.error({\n message: \"Impossible to get to this point. Fatal error.\"\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/tasks/domain/importFromUrlControllerSteps/ImportFromUrlControllerProcessAssetsStep.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_ImportFromUrlController","_importPath","_getBackOffSeconds","_constants","_getChildTasks","ImportFromUrlControllerProcessAssetsStep","execute","params","response","input","trigger","store","context","task","getTask","step","steps","IImportFromUrlControllerInputStep","PROCESS_ASSETS","triggered","files","filter","file","type","CmsImportExportFileType","ASSETS","length","output","error","message","code","aborted","done","failed","invalid","inputFiles","key","prependImportPath","name","definition","IMPORT_FROM_URL_PROCESS_ASSETS_TASK","maxInsertErrors","modelId","push","continue","seconds","getBackOffSeconds","iterations","finished","running","collection","getChildTasks","exports"],"sources":["ImportFromUrlControllerProcessAssetsStep.ts"],"sourcesContent":["import type { Context } from \"~/types\";\nimport { CmsImportExportFileType } from \"~/types\";\nimport type {\n IImportFromUrlControllerInput,\n IImportFromUrlControllerOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlController\";\nimport { IImportFromUrlControllerInputStep } from \"~/tasks/domain/abstractions/ImportFromUrlController\";\nimport type { ImportFromUrlControllerStep } from \"~/tasks/domain/importFromUrlControllerSteps/abstractions/ImportFromUrlControllerStep\";\nimport type { ITask, ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport { prependImportPath } from \"~/tasks/utils/helpers/importPath\";\nimport { getBackOffSeconds } from \"~/tasks/utils/helpers/getBackOffSeconds\";\nimport { IMPORT_FROM_URL_PROCESS_ASSETS_TASK } from \"~/tasks/constants\";\nimport { getChildTasks } from \"~/tasks/domain/importFromUrlControllerSteps/getChildTasks\";\nimport type { IImportFromUrlProcessAssetsInput } from \"../importFromUrlProcessAssets/abstractions/ImportFromUrlProcessAssets\";\n\nexport class ImportFromUrlControllerProcessAssetsStep<\n C extends Context = Context,\n I extends IImportFromUrlControllerInput = IImportFromUrlControllerInput,\n O extends IImportFromUrlControllerOutput = IImportFromUrlControllerOutput\n> implements ImportFromUrlControllerStep<C, I, O>\n{\n public async execute(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { response, input, trigger, store, context } = params;\n\n const task = store.getTask() as ITask<I, O>;\n\n const step = input.steps[IImportFromUrlControllerInputStep.PROCESS_ASSETS];\n if (!step?.triggered) {\n const files = input.files.filter(file => {\n return file.type === CmsImportExportFileType.ASSETS;\n });\n if (files.length === 0) {\n const output: IImportFromUrlControllerOutput = {\n error: {\n message: \"No assets files found.\",\n code: \"NO_ASSETS_FILES\"\n },\n files: [],\n aborted: [],\n done: [],\n failed: [],\n invalid: []\n };\n return response.done(output as O);\n }\n const inputFiles: string[] = [];\n for (const file of files) {\n const key = prependImportPath(file.key);\n await trigger<IImportFromUrlProcessAssetsInput>({\n name: `Import From Url - Process assets`,\n definition: IMPORT_FROM_URL_PROCESS_ASSETS_TASK,\n input: {\n file: {\n key,\n type: file.type\n },\n maxInsertErrors: input.maxInsertErrors,\n modelId: input.modelId\n }\n });\n inputFiles.push(key);\n }\n\n const output: I = {\n ...input,\n steps: {\n ...input.steps,\n [IImportFromUrlControllerInputStep.PROCESS_ASSETS]: {\n ...step,\n triggered: true,\n files: inputFiles\n }\n }\n };\n\n return response.continue(output, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (step.finished !== true) {\n const { failed, running, invalid, aborted, collection, done } = await getChildTasks({\n context,\n task,\n definition: IMPORT_FROM_URL_PROCESS_ASSETS_TASK\n });\n\n /**\n * If there are any running tasks, we should continue waiting.\n */\n if (running.length > 0) {\n return response.continue(input, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (collection.length === 0) {\n return response.error({\n message: \"No process assets tasks found. We are not continuing.\",\n code: \"NO_PROCESS_ASSETS_TASKS\"\n });\n }\n\n const output: I = {\n ...input,\n steps: {\n ...input.steps,\n [IImportFromUrlControllerInputStep.PROCESS_ASSETS]: {\n ...step,\n failed,\n invalid,\n aborted,\n done,\n finished: true\n }\n }\n };\n return response.continue(output);\n }\n return response.error({\n message: \"Impossible to get to this point. Fatal error.\"\n });\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAKA,IAAAC,wBAAA,GAAAD,OAAA;AAGA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,kBAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,cAAA,GAAAL,OAAA;AAGO,MAAMM,wCAAwC,CAKrD;EACI,MAAaC,OAAOA,CAACC,MAA+B,EAAsC;IACtF,MAAM;MAAEC,QAAQ;MAAEC,KAAK;MAAEC,OAAO;MAAEC,KAAK;MAAEC;IAAQ,CAAC,GAAGL,MAAM;IAE3D,MAAMM,IAAI,GAAGF,KAAK,CAACG,OAAO,CAAC,CAAgB;IAE3C,MAAMC,IAAI,GAAGN,KAAK,CAACO,KAAK,CAACC,0DAAiC,CAACC,cAAc,CAAC;IAC1E,IAAI,CAACH,IAAI,EAAEI,SAAS,EAAE;MAClB,MAAMC,KAAK,GAAGX,KAAK,CAACW,KAAK,CAACC,MAAM,CAACC,IAAI,IAAI;QACrC,OAAOA,IAAI,CAACC,IAAI,KAAKC,8BAAuB,CAACC,MAAM;MACvD,CAAC,CAAC;MACF,IAAIL,KAAK,CAACM,MAAM,KAAK,CAAC,EAAE;QACpB,MAAMC,MAAsC,GAAG;UAC3CC,KAAK,EAAE;YACHC,OAAO,EAAE,wBAAwB;YACjCC,IAAI,EAAE;UACV,CAAC;UACDV,KAAK,EAAE,EAAE;UACTW,OAAO,EAAE,EAAE;UACXC,IAAI,EAAE,EAAE;UACRC,MAAM,EAAE,EAAE;UACVC,OAAO,EAAE;QACb,CAAC;QACD,OAAO1B,QAAQ,CAACwB,IAAI,CAACL,MAAW,CAAC;MACrC;MACA,MAAMQ,UAAoB,GAAG,EAAE;MAC/B,KAAK,MAAMb,IAAI,IAAIF,KAAK,EAAE;QACtB,MAAMgB,GAAG,GAAG,IAAAC,6BAAiB,EAACf,IAAI,CAACc,GAAG,CAAC;QACvC,MAAM1B,OAAO,CAAmC;UAC5C4B,IAAI,
|
|
1
|
+
{"version":3,"names":["_types","require","_ImportFromUrlController","_importPath","_getBackOffSeconds","_constants","_getChildTasks","ImportFromUrlControllerProcessAssetsStep","execute","params","response","input","trigger","store","context","task","getTask","step","steps","IImportFromUrlControllerInputStep","PROCESS_ASSETS","triggered","files","filter","file","type","CmsImportExportFileType","ASSETS","length","output","error","message","code","aborted","done","failed","invalid","inputFiles","key","prependImportPath","name","definition","IMPORT_FROM_URL_PROCESS_ASSETS_TASK","maxInsertErrors","modelId","push","continue","seconds","getBackOffSeconds","iterations","finished","running","collection","getChildTasks","exports"],"sources":["ImportFromUrlControllerProcessAssetsStep.ts"],"sourcesContent":["import type { Context } from \"~/types\";\nimport { CmsImportExportFileType } from \"~/types\";\nimport type {\n IImportFromUrlControllerInput,\n IImportFromUrlControllerOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlController\";\nimport { IImportFromUrlControllerInputStep } from \"~/tasks/domain/abstractions/ImportFromUrlController\";\nimport type { ImportFromUrlControllerStep } from \"~/tasks/domain/importFromUrlControllerSteps/abstractions/ImportFromUrlControllerStep\";\nimport type { ITask, ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport { prependImportPath } from \"~/tasks/utils/helpers/importPath\";\nimport { getBackOffSeconds } from \"~/tasks/utils/helpers/getBackOffSeconds\";\nimport { IMPORT_FROM_URL_PROCESS_ASSETS_TASK } from \"~/tasks/constants\";\nimport { getChildTasks } from \"~/tasks/domain/importFromUrlControllerSteps/getChildTasks\";\nimport type { IImportFromUrlProcessAssetsInput } from \"../importFromUrlProcessAssets/abstractions/ImportFromUrlProcessAssets\";\n\nexport class ImportFromUrlControllerProcessAssetsStep<\n C extends Context = Context,\n I extends IImportFromUrlControllerInput = IImportFromUrlControllerInput,\n O extends IImportFromUrlControllerOutput = IImportFromUrlControllerOutput\n> implements ImportFromUrlControllerStep<C, I, O>\n{\n public async execute(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { response, input, trigger, store, context } = params;\n\n const task = store.getTask() as ITask<I, O>;\n\n const step = input.steps[IImportFromUrlControllerInputStep.PROCESS_ASSETS];\n if (!step?.triggered) {\n const files = input.files.filter(file => {\n return file.type === CmsImportExportFileType.ASSETS;\n });\n if (files.length === 0) {\n const output: IImportFromUrlControllerOutput = {\n error: {\n message: \"No assets files found.\",\n code: \"NO_ASSETS_FILES\"\n },\n files: [],\n aborted: [],\n done: [],\n failed: [],\n invalid: []\n };\n return response.done(output as O);\n }\n const inputFiles: string[] = [];\n for (const file of files) {\n const key = prependImportPath(file.key);\n await trigger<IImportFromUrlProcessAssetsInput>({\n name: `Import From Url - Process assets`,\n definition: IMPORT_FROM_URL_PROCESS_ASSETS_TASK,\n input: {\n file: {\n key,\n type: file.type\n },\n maxInsertErrors: input.maxInsertErrors,\n modelId: input.modelId\n }\n });\n inputFiles.push(key);\n }\n\n const output: I = {\n ...input,\n steps: {\n ...input.steps,\n [IImportFromUrlControllerInputStep.PROCESS_ASSETS]: {\n ...step,\n triggered: true,\n files: inputFiles\n }\n }\n };\n\n return response.continue(output, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (step.finished !== true) {\n const { failed, running, invalid, aborted, collection, done } = await getChildTasks({\n context,\n task,\n definition: IMPORT_FROM_URL_PROCESS_ASSETS_TASK\n });\n\n /**\n * If there are any running tasks, we should continue waiting.\n */\n if (running.length > 0) {\n return response.continue(input, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (collection.length === 0) {\n return response.error({\n message: \"No process assets tasks found. We are not continuing.\",\n code: \"NO_PROCESS_ASSETS_TASKS\"\n });\n }\n\n const output: I = {\n ...input,\n steps: {\n ...input.steps,\n [IImportFromUrlControllerInputStep.PROCESS_ASSETS]: {\n ...step,\n failed,\n invalid,\n aborted,\n done,\n finished: true\n }\n }\n };\n return response.continue(output);\n }\n return response.error({\n message: \"Impossible to get to this point. Fatal error.\"\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/tasks/domain/importFromUrlControllerSteps/ImportFromUrlControllerProcessEntriesStep.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_constants","require","_getBackOffSeconds","_types","_ImportFromUrlController","_getChildTasks","_importPath","ImportFromUrlControllerProcessEntriesStep","execute","params","context","response","input","trigger","store","task","getTask","step","steps","IImportFromUrlControllerInputStep","PROCESS_ENTRIES","triggered","files","filter","file","type","CmsImportExportFileType","ENTRIES","length","output","error","message","code","aborted","done","failed","invalid","inputFiles","key","prependImportPath","name","definition","IMPORT_FROM_URL_PROCESS_ENTRIES_TASK","maxInsertErrors","modelId","push","continue","seconds","getBackOffSeconds","iterations","finished","running","collection","getChildTasks","exports"],"sources":["ImportFromUrlControllerProcessEntriesStep.ts"],"sourcesContent":["import type { ImportFromUrlControllerStep } from \"./abstractions/ImportFromUrlControllerStep\";\nimport { IMPORT_FROM_URL_PROCESS_ENTRIES_TASK } from \"~/tasks/constants\";\nimport { getBackOffSeconds } from \"~/tasks/utils/helpers/getBackOffSeconds\";\nimport type { Context } from \"~/types\";\nimport { CmsImportExportFileType } from \"~/types\";\nimport type {\n IImportFromUrlControllerInput,\n IImportFromUrlControllerOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlController\";\nimport { IImportFromUrlControllerInputStep } from \"~/tasks/domain/abstractions/ImportFromUrlController\";\nimport type { ITask, ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport { getChildTasks } from \"./getChildTasks\";\nimport type { IImportFromUrlProcessEntriesInput } from \"../importFromUrlProcessEntries/abstractions/ImportFromUrlProcessEntries\";\nimport { prependImportPath } from \"~/tasks/utils/helpers/importPath\";\n\nexport class ImportFromUrlControllerProcessEntriesStep<\n C extends Context = Context,\n I extends IImportFromUrlControllerInput = IImportFromUrlControllerInput,\n O extends IImportFromUrlControllerOutput = IImportFromUrlControllerOutput\n> implements ImportFromUrlControllerStep<C, I, O>\n{\n public async execute(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { context, response, input, trigger, store } = params;\n\n const task = store.getTask() as ITask<I, O>;\n\n const step = input.steps[IImportFromUrlControllerInputStep.PROCESS_ENTRIES];\n if (!step?.triggered) {\n const files = input.files.filter(file => {\n return file.type === CmsImportExportFileType.ENTRIES;\n });\n if (files.length === 0) {\n const output: IImportFromUrlControllerOutput = {\n error: {\n message: \"No entries files found.\",\n code: \"NO_ENTRIES_FILES\"\n },\n files: [],\n aborted: [],\n done: [],\n failed: [],\n invalid: []\n };\n return response.done(output as O);\n }\n const inputFiles: string[] = [];\n for (const file of files) {\n const key = prependImportPath(file.key);\n await trigger<IImportFromUrlProcessEntriesInput>({\n name: `Import From Url - Process entries`,\n definition: IMPORT_FROM_URL_PROCESS_ENTRIES_TASK,\n input: {\n file: {\n key,\n type: file.type\n },\n maxInsertErrors: input.maxInsertErrors,\n modelId: input.modelId\n }\n });\n inputFiles.push(key);\n }\n\n const output: I = {\n ...input,\n steps: {\n ...input.steps,\n [IImportFromUrlControllerInputStep.PROCESS_ENTRIES]: {\n ...step,\n triggered: true,\n files: inputFiles\n }\n }\n };\n\n return response.continue(output, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (step.finished !== true) {\n const { failed, running, invalid, aborted, collection, done } = await getChildTasks({\n context,\n task,\n definition: IMPORT_FROM_URL_PROCESS_ENTRIES_TASK\n });\n\n /**\n * If there are any running tasks, we should continue waiting.\n */\n if (running.length > 0) {\n return response.continue(input, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (collection.length === 0) {\n return response.error({\n message: \"No process entries tasks found. We are not continuing.\",\n code: \"NO_PROCESS_ENTRIES_TASKS\"\n });\n }\n\n const output: I = {\n ...input,\n steps: {\n ...input.steps,\n [IImportFromUrlControllerInputStep.PROCESS_ENTRIES]: {\n ...step,\n failed,\n invalid,\n aborted,\n done,\n finished: true\n }\n }\n };\n return response.continue(output);\n }\n return response.error({\n message: \"Impossible to get to this point. Fatal error.\"\n });\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AAKA,IAAAG,wBAAA,GAAAH,OAAA;AAEA,IAAAI,cAAA,GAAAJ,OAAA;AAEA,IAAAK,WAAA,GAAAL,OAAA;AAEO,MAAMM,yCAAyC,CAKtD;EACI,MAAaC,OAAOA,CAACC,MAA+B,EAAsC;IACtF,MAAM;MAAEC,OAAO;MAAEC,QAAQ;MAAEC,KAAK;MAAEC,OAAO;MAAEC;IAAM,CAAC,GAAGL,MAAM;IAE3D,MAAMM,IAAI,GAAGD,KAAK,CAACE,OAAO,CAAC,CAAgB;IAE3C,MAAMC,IAAI,GAAGL,KAAK,CAACM,KAAK,CAACC,0DAAiC,CAACC,eAAe,CAAC;IAC3E,IAAI,CAACH,IAAI,EAAEI,SAAS,EAAE;MAClB,MAAMC,KAAK,GAAGV,KAAK,CAACU,KAAK,CAACC,MAAM,CAACC,IAAI,IAAI;QACrC,OAAOA,IAAI,CAACC,IAAI,KAAKC,8BAAuB,CAACC,OAAO;MACxD,CAAC,CAAC;MACF,IAAIL,KAAK,CAACM,MAAM,KAAK,CAAC,EAAE;QACpB,MAAMC,MAAsC,GAAG;UAC3CC,KAAK,EAAE;YACHC,OAAO,EAAE,yBAAyB;YAClCC,IAAI,EAAE;UACV,CAAC;UACDV,KAAK,EAAE,EAAE;UACTW,OAAO,EAAE,EAAE;UACXC,IAAI,EAAE,EAAE;UACRC,MAAM,EAAE,EAAE;UACVC,OAAO,EAAE;QACb,CAAC;QACD,OAAOzB,QAAQ,CAACuB,IAAI,CAACL,MAAW,CAAC;MACrC;MACA,MAAMQ,UAAoB,GAAG,EAAE;MAC/B,KAAK,MAAMb,IAAI,IAAIF,KAAK,EAAE;QACtB,MAAMgB,GAAG,GAAG,IAAAC,6BAAiB,EAACf,IAAI,CAACc,GAAG,CAAC;QACvC,MAAMzB,OAAO,CAAoC;UAC7C2B,IAAI,
|
|
1
|
+
{"version":3,"names":["_constants","require","_getBackOffSeconds","_types","_ImportFromUrlController","_getChildTasks","_importPath","ImportFromUrlControllerProcessEntriesStep","execute","params","context","response","input","trigger","store","task","getTask","step","steps","IImportFromUrlControllerInputStep","PROCESS_ENTRIES","triggered","files","filter","file","type","CmsImportExportFileType","ENTRIES","length","output","error","message","code","aborted","done","failed","invalid","inputFiles","key","prependImportPath","name","definition","IMPORT_FROM_URL_PROCESS_ENTRIES_TASK","maxInsertErrors","modelId","push","continue","seconds","getBackOffSeconds","iterations","finished","running","collection","getChildTasks","exports"],"sources":["ImportFromUrlControllerProcessEntriesStep.ts"],"sourcesContent":["import type { ImportFromUrlControllerStep } from \"./abstractions/ImportFromUrlControllerStep\";\nimport { IMPORT_FROM_URL_PROCESS_ENTRIES_TASK } from \"~/tasks/constants\";\nimport { getBackOffSeconds } from \"~/tasks/utils/helpers/getBackOffSeconds\";\nimport type { Context } from \"~/types\";\nimport { CmsImportExportFileType } from \"~/types\";\nimport type {\n IImportFromUrlControllerInput,\n IImportFromUrlControllerOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlController\";\nimport { IImportFromUrlControllerInputStep } from \"~/tasks/domain/abstractions/ImportFromUrlController\";\nimport type { ITask, ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport { getChildTasks } from \"./getChildTasks\";\nimport type { IImportFromUrlProcessEntriesInput } from \"../importFromUrlProcessEntries/abstractions/ImportFromUrlProcessEntries\";\nimport { prependImportPath } from \"~/tasks/utils/helpers/importPath\";\n\nexport class ImportFromUrlControllerProcessEntriesStep<\n C extends Context = Context,\n I extends IImportFromUrlControllerInput = IImportFromUrlControllerInput,\n O extends IImportFromUrlControllerOutput = IImportFromUrlControllerOutput\n> implements ImportFromUrlControllerStep<C, I, O>\n{\n public async execute(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { context, response, input, trigger, store } = params;\n\n const task = store.getTask() as ITask<I, O>;\n\n const step = input.steps[IImportFromUrlControllerInputStep.PROCESS_ENTRIES];\n if (!step?.triggered) {\n const files = input.files.filter(file => {\n return file.type === CmsImportExportFileType.ENTRIES;\n });\n if (files.length === 0) {\n const output: IImportFromUrlControllerOutput = {\n error: {\n message: \"No entries files found.\",\n code: \"NO_ENTRIES_FILES\"\n },\n files: [],\n aborted: [],\n done: [],\n failed: [],\n invalid: []\n };\n return response.done(output as O);\n }\n const inputFiles: string[] = [];\n for (const file of files) {\n const key = prependImportPath(file.key);\n await trigger<IImportFromUrlProcessEntriesInput>({\n name: `Import From Url - Process entries`,\n definition: IMPORT_FROM_URL_PROCESS_ENTRIES_TASK,\n input: {\n file: {\n key,\n type: file.type\n },\n maxInsertErrors: input.maxInsertErrors,\n modelId: input.modelId\n }\n });\n inputFiles.push(key);\n }\n\n const output: I = {\n ...input,\n steps: {\n ...input.steps,\n [IImportFromUrlControllerInputStep.PROCESS_ENTRIES]: {\n ...step,\n triggered: true,\n files: inputFiles\n }\n }\n };\n\n return response.continue(output, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (step.finished !== true) {\n const { failed, running, invalid, aborted, collection, done } = await getChildTasks({\n context,\n task,\n definition: IMPORT_FROM_URL_PROCESS_ENTRIES_TASK\n });\n\n /**\n * If there are any running tasks, we should continue waiting.\n */\n if (running.length > 0) {\n return response.continue(input, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (collection.length === 0) {\n return response.error({\n message: \"No process entries tasks found. We are not continuing.\",\n code: \"NO_PROCESS_ENTRIES_TASKS\"\n });\n }\n\n const output: I = {\n ...input,\n steps: {\n ...input.steps,\n [IImportFromUrlControllerInputStep.PROCESS_ENTRIES]: {\n ...step,\n failed,\n invalid,\n aborted,\n done,\n finished: true\n }\n }\n };\n return response.continue(output);\n }\n return response.error({\n message: \"Impossible to get to this point. Fatal error.\"\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_tasks","require","mapServiceStatusToTaskStatus","task","serviceInfo","console","log","id","definitionId","status","TaskDataStatus","RUNNING","SUCCESS","FAILED","ABORTED","PENDING","getChildTasks","context","definition","running","done","invalid","aborted","failed","collection","items","tasks","listTasks","where","parentId","limit","push","taskStatus","fetchServiceInfo","error","exports"],"sources":["getChildTasks.ts"],"sourcesContent":["import type { ITask, ITaskResponseDoneResultOutput } from \"@webiny/tasks\";\nimport { TaskDataStatus } from \"@webiny/tasks\";\nimport type { Context } from \"~/types\";\nimport { IStepFunctionServiceFetchResult } from \"@webiny/tasks/service/StepFunctionServicePlugin\";\n\nexport interface IGetChildTasksParams {\n context: Context;\n task: ITask;\n definition: string;\n}\n\nconst mapServiceStatusToTaskStatus = (\n task: ITask<any, any>,\n serviceInfo: IStepFunctionServiceFetchResult | null\n) => {\n if (!serviceInfo) {\n console.log(`Service info is missing for task ${task.id} (${task.definitionId}).`);\n return null;\n }\n if (serviceInfo.status === \"RUNNING\") {\n return TaskDataStatus.RUNNING;\n } else if (serviceInfo.status === \"SUCCEEDED\") {\n return TaskDataStatus.SUCCESS;\n } else if (serviceInfo.status === \"FAILED\") {\n return TaskDataStatus.FAILED;\n } else if (serviceInfo.status === \"ABORTED\") {\n return TaskDataStatus.ABORTED;\n } else if (serviceInfo.status === \"TIMED_OUT\" || serviceInfo.status === \"PENDING_REDRIVE\") {\n console.log(\n `Service status is ${serviceInfo.status} for task ${task.id} (${task.definitionId}).`\n );\n return null;\n }\n return TaskDataStatus.PENDING;\n};\n\nexport const getChildTasks = async <I, O extends ITaskResponseDoneResultOutput>({\n context,\n task,\n definition\n}: IGetChildTasksParams) => {\n const running: string[] = [];\n const done: string[] = [];\n const invalid: string[] = [];\n const aborted: string[] = [];\n const failed: string[] = [];\n const collection: ITask<I, O>[] = [];\n\n const { items } = await context.tasks.listTasks<I, O>({\n where: {\n parentId: task.id,\n definitionId: definition\n },\n limit: 100000\n });\n for (const task of items) {\n collection.push(task);\n\n if (\n task.taskStatus === TaskDataStatus.RUNNING ||\n task.taskStatus === TaskDataStatus.PENDING\n ) {\n /**\n * We also need to check the actual status of the service.\n * It can happen that the task is marked as running, but the service is not running.\n */\n const serviceInfo = await context.tasks.fetchServiceInfo(task);\n const status = mapServiceStatusToTaskStatus(task, serviceInfo);\n\n if (status === null || !serviceInfo) {\n invalid.push(task.id);\n continue;\n } else if (status !== task.taskStatus) {\n console.error(\n `Status of the task is not same as the status of the service (task: ${task.taskStatus}, service: ${status} / ${serviceInfo.status}).`\n );\n invalid.push(task.id);\n continue;\n }\n running.push(task.id);\n continue;\n } else if (task.taskStatus === TaskDataStatus.SUCCESS) {\n done.push(task.id);\n continue;\n } else if (task.taskStatus === TaskDataStatus.FAILED) {\n failed.push(task.id);\n continue;\n } else if (task.taskStatus === TaskDataStatus.ABORTED) {\n aborted.push(task.id);\n continue;\n }\n /**\n * Impossible to be in a state not listed above, but just in case.\n */\n invalid.push(task.id);\n }\n return {\n running,\n done,\n invalid,\n aborted,\n failed,\n collection\n };\n};\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAUA,MAAMC,4BAA4B,GAAGA,CACjCC,IAAqB,EACrBC,WAAmD,KAClD;EACD,IAAI,CAACA,WAAW,EAAE;IACdC,OAAO,CAACC,GAAG,
|
|
1
|
+
{"version":3,"names":["_tasks","require","mapServiceStatusToTaskStatus","task","serviceInfo","console","log","id","definitionId","status","TaskDataStatus","RUNNING","SUCCESS","FAILED","ABORTED","PENDING","getChildTasks","context","definition","running","done","invalid","aborted","failed","collection","items","tasks","listTasks","where","parentId","limit","push","taskStatus","fetchServiceInfo","error","exports"],"sources":["getChildTasks.ts"],"sourcesContent":["import type { ITask, ITaskResponseDoneResultOutput } from \"@webiny/tasks\";\nimport { TaskDataStatus } from \"@webiny/tasks\";\nimport type { Context } from \"~/types\";\nimport { IStepFunctionServiceFetchResult } from \"@webiny/tasks/service/StepFunctionServicePlugin\";\n\nexport interface IGetChildTasksParams {\n context: Context;\n task: ITask;\n definition: string;\n}\n\nconst mapServiceStatusToTaskStatus = (\n task: ITask<any, any>,\n serviceInfo: IStepFunctionServiceFetchResult | null\n) => {\n if (!serviceInfo) {\n console.log(`Service info is missing for task ${task.id} (${task.definitionId}).`);\n return null;\n }\n if (serviceInfo.status === \"RUNNING\") {\n return TaskDataStatus.RUNNING;\n } else if (serviceInfo.status === \"SUCCEEDED\") {\n return TaskDataStatus.SUCCESS;\n } else if (serviceInfo.status === \"FAILED\") {\n return TaskDataStatus.FAILED;\n } else if (serviceInfo.status === \"ABORTED\") {\n return TaskDataStatus.ABORTED;\n } else if (serviceInfo.status === \"TIMED_OUT\" || serviceInfo.status === \"PENDING_REDRIVE\") {\n console.log(\n `Service status is ${serviceInfo.status} for task ${task.id} (${task.definitionId}).`\n );\n return null;\n }\n return TaskDataStatus.PENDING;\n};\n\nexport const getChildTasks = async <I, O extends ITaskResponseDoneResultOutput>({\n context,\n task,\n definition\n}: IGetChildTasksParams) => {\n const running: string[] = [];\n const done: string[] = [];\n const invalid: string[] = [];\n const aborted: string[] = [];\n const failed: string[] = [];\n const collection: ITask<I, O>[] = [];\n\n const { items } = await context.tasks.listTasks<I, O>({\n where: {\n parentId: task.id,\n definitionId: definition\n },\n limit: 100000\n });\n for (const task of items) {\n collection.push(task);\n\n if (\n task.taskStatus === TaskDataStatus.RUNNING ||\n task.taskStatus === TaskDataStatus.PENDING\n ) {\n /**\n * We also need to check the actual status of the service.\n * It can happen that the task is marked as running, but the service is not running.\n */\n const serviceInfo = await context.tasks.fetchServiceInfo(task);\n const status = mapServiceStatusToTaskStatus(task, serviceInfo);\n\n if (status === null || !serviceInfo) {\n invalid.push(task.id);\n continue;\n } else if (status !== task.taskStatus) {\n console.error(\n `Status of the task is not same as the status of the service (task: ${task.taskStatus}, service: ${status} / ${serviceInfo.status}).`\n );\n invalid.push(task.id);\n continue;\n }\n running.push(task.id);\n continue;\n } else if (task.taskStatus === TaskDataStatus.SUCCESS) {\n done.push(task.id);\n continue;\n } else if (task.taskStatus === TaskDataStatus.FAILED) {\n failed.push(task.id);\n continue;\n } else if (task.taskStatus === TaskDataStatus.ABORTED) {\n aborted.push(task.id);\n continue;\n }\n /**\n * Impossible to be in a state not listed above, but just in case.\n */\n invalid.push(task.id);\n }\n return {\n running,\n done,\n invalid,\n aborted,\n failed,\n collection\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_constants","_getFilePath","_error","ImportFromUrlProcessAssets","constructor","params","fileFetcher","reader","decompressor","run","context","response","input","isCloseToTimeout","isAborted","maxInsertErrors","modelId","error","message","code","file","type","CmsImportExportFileType","ASSETS","recordExists","id","result","fileManager","getFile","ex","structuredClone","errors","sources","read","key","length","manifest","readManifest","console","continue","aborted","data","record","takeNextAssetRecord","lastAsset","done","source","find","path","push","existsPhysically","exists","override","log","extract","target","Key","updateFile","createFile","size","name","meta","aliases","extensions","location","tags","extractPath","getFilePath","MANIFEST_JSON","WebinyError","Error","json","JSON","parse","assets","lastIndex","findIndex","asset","exports"],"sources":["ImportFromUrlProcessAssets.ts"],"sourcesContent":["import type { ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks/types\";\nimport type {\n IImportFromUrlProcessAssets,\n IImportFromUrlProcessAssetsInput,\n IImportFromUrlProcessAssetsOutput\n} from \"~/tasks/domain/importFromUrlProcessAssets/abstractions/ImportFromUrlProcessAssets\";\nimport { CmsImportExportFileType, Context } from \"~/types\";\nimport type { IFileFetcher } from \"~/tasks/utils/fileFetcher\";\nimport type {\n ICompressedFileReader,\n IDecompressor,\n IUnzipperFile\n} from \"~/tasks/utils/decompressor\";\nimport { MANIFEST_JSON } from \"~/tasks/constants\";\nimport { getFilePath } from \"~/tasks/utils/helpers/getFilePath\";\nimport { WebinyError } from \"@webiny/error\";\nimport type { ICmsAssetsManifestJson } from \"~/tasks/utils/types\";\nimport type { IResolvedAsset } from \"~/tasks/utils/entryAssets\";\n\nexport interface IImportFromUrlProcessAssetsParams {\n fileFetcher: IFileFetcher;\n reader: ICompressedFileReader;\n decompressor: IDecompressor;\n}\n\nexport class ImportFromUrlProcessAssets<\n C extends Context = Context,\n I extends IImportFromUrlProcessAssetsInput = IImportFromUrlProcessAssetsInput,\n O extends IImportFromUrlProcessAssetsOutput = IImportFromUrlProcessAssetsOutput\n> implements IImportFromUrlProcessAssets<C, I, O>\n{\n private readonly fileFetcher: IFileFetcher;\n private readonly reader: ICompressedFileReader;\n private readonly decompressor: IDecompressor;\n\n public constructor(params: IImportFromUrlProcessAssetsParams) {\n this.fileFetcher = params.fileFetcher;\n this.reader = params.reader;\n this.decompressor = params.decompressor;\n }\n\n public async run(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { context, response, input, isCloseToTimeout, isAborted } = params;\n\n const maxInsertErrors = input.maxInsertErrors || 100;\n\n if (!input.modelId) {\n return response.error({\n message: `Missing \"modelId\" in the input.`,\n code: \"MISSING_MODEL_ID\"\n });\n } else if (!input.file) {\n return response.error({\n message: `No file found in the provided data.`,\n code: \"NO_FILE_FOUND\"\n });\n } else if (input.file.type !== CmsImportExportFileType.ASSETS) {\n return response.error({\n message: `Invalid file type. Expected \"${CmsImportExportFileType.ASSETS}\" but got \"${input.file.type}\".`,\n code: \"INVALID_FILE_TYPE\"\n });\n }\n\n const recordExists = async (id: string): Promise<boolean> => {\n try {\n const result = await context.fileManager.getFile(id);\n return !!result;\n } catch (ex) {\n return false;\n }\n };\n\n const result = structuredClone({\n ...input,\n errors: []\n });\n /**\n * Read the compressed archive and get all the file information.\n */\n const sources = await this.reader.read(result.file.key);\n if (sources.length === 0) {\n return response.error({\n message: `No files found in the compressed archive.`,\n code: \"NO_FILES_FOUND\"\n });\n }\n\n /**\n * Read the manifest file.\n * Should not be possible it does not exist, but let's handle it anyway.\n */\n let manifest: ICmsAssetsManifestJson;\n try {\n manifest = await this.readManifest(sources, result);\n } catch (ex) {\n console.error(ex);\n return response.error(ex);\n }\n\n while (true) {\n if (isCloseToTimeout()) {\n return response.continue(result);\n } else if (isAborted()) {\n return response.aborted();\n } else if (result.errors.length > maxInsertErrors) {\n return response.error({\n message: `Too many errors encountered while processing assets.`,\n code: \"TOO_MANY_ERRORS\",\n data: {\n errors: result.errors\n }\n });\n }\n const record = this.takeNextAssetRecord(manifest, result.lastAsset);\n if (!record) {\n return response.done(\"No more assets to process\");\n }\n result.lastAsset = record.id;\n const source = sources.find(file => file.path === record.key);\n if (!source) {\n result.errors.push({\n file: record.key,\n message: `File not found in the compressed archive.`\n });\n continue;\n }\n /**\n * Check if the file exists physically.\n */\n const existsPhysically = await this.fileFetcher.exists(source.path);\n if (existsPhysically && !input.override) {\n console.log(\n `Asset \"${record.id}\" / ${source.path} file already exists. Skipping...`\n );\n continue;\n }\n /**\n * Check if the file record already exists.\n */\n const exists = await recordExists(record.id);\n if (exists && !input.override) {\n console.log(\n `Asset \"${record.id}\" / ${source.path} record already exists. Skipping...`\n );\n continue;\n }\n /**\n * Upload the file to the S3 bucket, if it does not exist already.\n */\n if (!existsPhysically) {\n try {\n const file = await this.decompressor.extract({\n source,\n target: record.key\n });\n if (!file?.Key) {\n result.errors.push({\n file: record.key,\n message: `Could not upload the file \"${source.path}\" to \"${record.key}\".`\n });\n continue;\n }\n } catch (ex) {\n result.errors.push({\n file: record.key,\n message: ex.message\n });\n continue;\n }\n }\n /**\n * Update an existing file record.\n */\n if (exists) {\n try {\n await context.fileManager.updateFile(record.id, {\n ...record\n });\n } catch (ex) {\n result.errors.push({\n file: record.key,\n message: ex.message\n });\n }\n continue;\n }\n /**\n * Create a new file record.\n */\n try {\n await context.fileManager.createFile({\n ...record,\n id: record.id,\n key: record.key,\n size: record.size,\n type: record.type,\n name: record.name,\n meta: record.meta,\n aliases: record.aliases,\n extensions: record.extensions,\n location: record.location,\n tags: record.tags\n });\n } catch (ex) {\n result.errors.push({\n file: record.key,\n message: ex.message\n });\n }\n }\n }\n\n private async readManifest(\n sources: IUnzipperFile[],\n input: I\n ): Promise<ICmsAssetsManifestJson> {\n let manifest: string | undefined = input?.manifest;\n\n if (!manifest) {\n const extractPath = getFilePath(input.file.key);\n const source = sources.find(file => file.path === MANIFEST_JSON);\n if (!source) {\n throw new WebinyError({\n message: `No manifest file found in the compressed archive.`,\n code: \"NO_MANIFEST_FILE\"\n });\n }\n const target = `extracted/${extractPath.path}/${source.path}`;\n try {\n const file = await this.decompressor.extract({\n source,\n target\n });\n if (!file.Key) {\n throw new Error(`Could not upload the file \"${source.path}\" to \"${target}\".`);\n }\n manifest = file.Key;\n } catch (ex) {\n throw new WebinyError({\n message: ex.message,\n code: \"MANIFEST_DECOMPRESS_FAILED\"\n });\n }\n }\n\n let file: string | null;\n try {\n file = await this.fileFetcher.read(manifest);\n if (!file) {\n throw new WebinyError({\n message: `Could not fetch the manifest file \"${manifest}\".`,\n code: \"MANIFEST_NOT_FOUND\"\n });\n }\n } catch (ex) {\n throw new WebinyError({\n message: ex.message,\n code: \"MANIFEST_FETCH_FAILED\",\n data: ex\n });\n }\n\n let json: ICmsAssetsManifestJson;\n try {\n json = JSON.parse(file);\n } catch (ex) {\n throw new WebinyError({\n message: ex.message,\n code: \"MANIFEST_PARSE_FAILED\",\n data: ex\n });\n }\n if (!json.assets?.length) {\n throw new WebinyError({\n message: `Invalid manifest file \"${manifest}\". Missing \"assets\" property.`,\n code: \"INVALID_MANIFEST_FILE\"\n });\n } else if (!json.size) {\n throw new WebinyError({\n message: `Invalid manifest file \"${manifest}\". Missing \"size\" property.`,\n code: \"INVALID_MANIFEST_FILE\"\n });\n }\n return json;\n }\n\n private takeNextAssetRecord(\n manifest: ICmsAssetsManifestJson,\n lastAsset: string | undefined\n ): IResolvedAsset | null {\n if (!lastAsset) {\n return manifest.assets[0] as IResolvedAsset;\n }\n const lastIndex = manifest.assets.findIndex(asset => asset.id === lastAsset);\n if (lastIndex === -1) {\n return null;\n }\n const asset = manifest.assets[lastIndex + 1];\n return asset || null;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_types","require","_constants","_getFilePath","_error","ImportFromUrlProcessAssets","constructor","params","fileFetcher","reader","decompressor","run","context","response","input","isCloseToTimeout","isAborted","maxInsertErrors","modelId","error","message","code","file","type","CmsImportExportFileType","ASSETS","recordExists","id","result","fileManager","getFile","ex","structuredClone","errors","sources","read","key","length","manifest","readManifest","console","continue","aborted","data","record","takeNextAssetRecord","lastAsset","done","source","find","path","push","existsPhysically","exists","override","log","extract","target","Key","updateFile","createFile","size","name","meta","aliases","extensions","location","tags","extractPath","getFilePath","MANIFEST_JSON","WebinyError","Error","json","JSON","parse","assets","lastIndex","findIndex","asset","exports"],"sources":["ImportFromUrlProcessAssets.ts"],"sourcesContent":["import type { ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks/types\";\nimport type {\n IImportFromUrlProcessAssets,\n IImportFromUrlProcessAssetsInput,\n IImportFromUrlProcessAssetsOutput\n} from \"~/tasks/domain/importFromUrlProcessAssets/abstractions/ImportFromUrlProcessAssets\";\nimport { CmsImportExportFileType, Context } from \"~/types\";\nimport type { IFileFetcher } from \"~/tasks/utils/fileFetcher\";\nimport type {\n ICompressedFileReader,\n IDecompressor,\n IUnzipperFile\n} from \"~/tasks/utils/decompressor\";\nimport { MANIFEST_JSON } from \"~/tasks/constants\";\nimport { getFilePath } from \"~/tasks/utils/helpers/getFilePath\";\nimport { WebinyError } from \"@webiny/error\";\nimport type { ICmsAssetsManifestJson } from \"~/tasks/utils/types\";\nimport type { IResolvedAsset } from \"~/tasks/utils/entryAssets\";\n\nexport interface IImportFromUrlProcessAssetsParams {\n fileFetcher: IFileFetcher;\n reader: ICompressedFileReader;\n decompressor: IDecompressor;\n}\n\nexport class ImportFromUrlProcessAssets<\n C extends Context = Context,\n I extends IImportFromUrlProcessAssetsInput = IImportFromUrlProcessAssetsInput,\n O extends IImportFromUrlProcessAssetsOutput = IImportFromUrlProcessAssetsOutput\n> implements IImportFromUrlProcessAssets<C, I, O>\n{\n private readonly fileFetcher: IFileFetcher;\n private readonly reader: ICompressedFileReader;\n private readonly decompressor: IDecompressor;\n\n public constructor(params: IImportFromUrlProcessAssetsParams) {\n this.fileFetcher = params.fileFetcher;\n this.reader = params.reader;\n this.decompressor = params.decompressor;\n }\n\n public async run(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { context, response, input, isCloseToTimeout, isAborted } = params;\n\n const maxInsertErrors = input.maxInsertErrors || 100;\n\n if (!input.modelId) {\n return response.error({\n message: `Missing \"modelId\" in the input.`,\n code: \"MISSING_MODEL_ID\"\n });\n } else if (!input.file) {\n return response.error({\n message: `No file found in the provided data.`,\n code: \"NO_FILE_FOUND\"\n });\n } else if (input.file.type !== CmsImportExportFileType.ASSETS) {\n return response.error({\n message: `Invalid file type. Expected \"${CmsImportExportFileType.ASSETS}\" but got \"${input.file.type}\".`,\n code: \"INVALID_FILE_TYPE\"\n });\n }\n\n const recordExists = async (id: string): Promise<boolean> => {\n try {\n const result = await context.fileManager.getFile(id);\n return !!result;\n } catch (ex) {\n return false;\n }\n };\n\n const result = structuredClone({\n ...input,\n errors: []\n });\n /**\n * Read the compressed archive and get all the file information.\n */\n const sources = await this.reader.read(result.file.key);\n if (sources.length === 0) {\n return response.error({\n message: `No files found in the compressed archive.`,\n code: \"NO_FILES_FOUND\"\n });\n }\n\n /**\n * Read the manifest file.\n * Should not be possible it does not exist, but let's handle it anyway.\n */\n let manifest: ICmsAssetsManifestJson;\n try {\n manifest = await this.readManifest(sources, result);\n } catch (ex) {\n console.error(ex);\n return response.error(ex);\n }\n\n while (true) {\n if (isCloseToTimeout()) {\n return response.continue(result);\n } else if (isAborted()) {\n return response.aborted();\n } else if (result.errors.length > maxInsertErrors) {\n return response.error({\n message: `Too many errors encountered while processing assets.`,\n code: \"TOO_MANY_ERRORS\",\n data: {\n errors: result.errors\n }\n });\n }\n const record = this.takeNextAssetRecord(manifest, result.lastAsset);\n if (!record) {\n return response.done(\"No more assets to process\");\n }\n result.lastAsset = record.id;\n const source = sources.find(file => file.path === record.key);\n if (!source) {\n result.errors.push({\n file: record.key,\n message: `File not found in the compressed archive.`\n });\n continue;\n }\n /**\n * Check if the file exists physically.\n */\n const existsPhysically = await this.fileFetcher.exists(source.path);\n if (existsPhysically && !input.override) {\n console.log(\n `Asset \"${record.id}\" / ${source.path} file already exists. Skipping...`\n );\n continue;\n }\n /**\n * Check if the file record already exists.\n */\n const exists = await recordExists(record.id);\n if (exists && !input.override) {\n console.log(\n `Asset \"${record.id}\" / ${source.path} record already exists. Skipping...`\n );\n continue;\n }\n /**\n * Upload the file to the S3 bucket, if it does not exist already.\n */\n if (!existsPhysically) {\n try {\n const file = await this.decompressor.extract({\n source,\n target: record.key\n });\n if (!file?.Key) {\n result.errors.push({\n file: record.key,\n message: `Could not upload the file \"${source.path}\" to \"${record.key}\".`\n });\n continue;\n }\n } catch (ex) {\n result.errors.push({\n file: record.key,\n message: ex.message\n });\n continue;\n }\n }\n /**\n * Update an existing file record.\n */\n if (exists) {\n try {\n await context.fileManager.updateFile(record.id, {\n ...record\n });\n } catch (ex) {\n result.errors.push({\n file: record.key,\n message: ex.message\n });\n }\n continue;\n }\n /**\n * Create a new file record.\n */\n try {\n await context.fileManager.createFile({\n ...record,\n id: record.id,\n key: record.key,\n size: record.size,\n type: record.type,\n name: record.name,\n meta: record.meta,\n aliases: record.aliases,\n extensions: record.extensions,\n location: record.location,\n tags: record.tags\n });\n } catch (ex) {\n result.errors.push({\n file: record.key,\n message: ex.message\n });\n }\n }\n }\n\n private async readManifest(\n sources: IUnzipperFile[],\n input: I\n ): Promise<ICmsAssetsManifestJson> {\n let manifest: string | undefined = input?.manifest;\n\n if (!manifest) {\n const extractPath = getFilePath(input.file.key);\n const source = sources.find(file => file.path === MANIFEST_JSON);\n if (!source) {\n throw new WebinyError({\n message: `No manifest file found in the compressed archive.`,\n code: \"NO_MANIFEST_FILE\"\n });\n }\n const target = `extracted/${extractPath.path}/${source.path}`;\n try {\n const file = await this.decompressor.extract({\n source,\n target\n });\n if (!file.Key) {\n throw new Error(`Could not upload the file \"${source.path}\" to \"${target}\".`);\n }\n manifest = file.Key;\n } catch (ex) {\n throw new WebinyError({\n message: ex.message,\n code: \"MANIFEST_DECOMPRESS_FAILED\"\n });\n }\n }\n\n let file: string | null;\n try {\n file = await this.fileFetcher.read(manifest);\n if (!file) {\n throw new WebinyError({\n message: `Could not fetch the manifest file \"${manifest}\".`,\n code: \"MANIFEST_NOT_FOUND\"\n });\n }\n } catch (ex) {\n throw new WebinyError({\n message: ex.message,\n code: \"MANIFEST_FETCH_FAILED\",\n data: ex\n });\n }\n\n let json: ICmsAssetsManifestJson;\n try {\n json = JSON.parse(file);\n } catch (ex) {\n throw new WebinyError({\n message: ex.message,\n code: \"MANIFEST_PARSE_FAILED\",\n data: ex\n });\n }\n if (!json.assets?.length) {\n throw new WebinyError({\n message: `Invalid manifest file \"${manifest}\". Missing \"assets\" property.`,\n code: \"INVALID_MANIFEST_FILE\"\n });\n } else if (!json.size) {\n throw new WebinyError({\n message: `Invalid manifest file \"${manifest}\". Missing \"size\" property.`,\n code: \"INVALID_MANIFEST_FILE\"\n });\n }\n return json;\n }\n\n private takeNextAssetRecord(\n manifest: ICmsAssetsManifestJson,\n lastAsset: string | undefined\n ): IResolvedAsset | null {\n if (!lastAsset) {\n return manifest.assets[0] as IResolvedAsset;\n }\n const lastIndex = manifest.assets.findIndex(asset => asset.id === lastAsset);\n if (lastIndex === -1) {\n return null;\n }\n const asset = manifest.assets[lastIndex + 1];\n return asset || null;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_ImportFromUrlProcessEntriesDecompress","_ImportFromUrlProcessEntriesInsert","ImportFromUrlProcessEntries","constructor","params","fileFetcher","reader","decompressor","run","context","response","input","modelId","error","message","code","file","type","CmsImportExportFileType","ENTRIES","entryManager","cms","getEntryManager","ex","decompress","done","ImportFromUrlProcessEntriesDecompress","console","data","stack","insert","ImportFromUrlProcessEntriesInsert","exports"],"sources":["ImportFromUrlProcessEntries.ts"],"sourcesContent":["import type { Context } from \"~/types\";\nimport { CmsImportExportFileType } from \"~/types\";\nimport type {\n IImportFromUrlProcessEntries,\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n} from \"./abstractions/ImportFromUrlProcessEntries\";\nimport type { ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport type { ICmsEntryManager } from \"@webiny/api-headless-cms/types\";\nimport { ImportFromUrlProcessEntriesDecompress } from \"~/tasks/domain/importFromUrlProcessEntries/ImportFromUrlProcessEntriesDecompress\";\nimport type { IFileFetcher } from \"~/tasks/utils/fileFetcher\";\nimport { ImportFromUrlProcessEntriesInsert } from \"./ImportFromUrlProcessEntriesInsert\";\nimport type { ICompressedFileReader, IDecompressor } from \"~/tasks/utils/decompressor\";\n\nexport interface IImportFromUrlProcessEntriesParams {\n fileFetcher: IFileFetcher;\n reader: ICompressedFileReader;\n decompressor: IDecompressor;\n}\n\nexport class ImportFromUrlProcessEntries<\n C extends Context = Context,\n I extends IImportFromUrlProcessEntriesInput = IImportFromUrlProcessEntriesInput,\n O extends IImportFromUrlProcessEntriesOutput = IImportFromUrlProcessEntriesOutput\n> implements IImportFromUrlProcessEntries<C, I, O>\n{\n private readonly fileFetcher: IFileFetcher;\n private readonly reader: ICompressedFileReader;\n private readonly decompressor: IDecompressor;\n\n public constructor(params: IImportFromUrlProcessEntriesParams) {\n this.fileFetcher = params.fileFetcher;\n this.reader = params.reader;\n this.decompressor = params.decompressor;\n }\n\n public async run(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { context, response, input } = params;\n\n if (!input.modelId) {\n return response.error({\n message: `Missing \"modelId\" in the input.`,\n code: \"MISSING_MODEL_ID\"\n });\n } else if (!input.file) {\n return response.error({\n message: `No file found in the provided data.`,\n code: \"NO_FILE_FOUND\"\n });\n } else if (input.file.type !== CmsImportExportFileType.ENTRIES) {\n return response.error({\n message: `Invalid file type. Expected \"${CmsImportExportFileType.ENTRIES}\" but got \"${input.file.type}\".`,\n code: \"INVALID_FILE_TYPE\"\n });\n }\n\n let entryManager: ICmsEntryManager;\n try {\n entryManager = await context.cms.getEntryManager(input.modelId);\n } catch (ex) {\n return response.error({\n message: `Model \"${input.modelId}\" not found.`,\n code: \"MODEL_NOT_FOUND\"\n });\n }\n\n if (!input.decompress?.done) {\n try {\n const decompress = new ImportFromUrlProcessEntriesDecompress<C, I, O>({\n reader: this.reader,\n decompressor: this.decompressor\n });\n\n return await decompress.run(params);\n } catch (ex) {\n console.error(ex);\n return response.error({\n message: ex.message,\n code: ex.code || \"DECOMPRESS_ERROR\",\n data: ex.data,\n stack: ex.stack\n });\n }\n }\n\n try {\n const insert = new ImportFromUrlProcessEntriesInsert<C, I, O>({\n entryManager,\n fileFetcher: this.fileFetcher\n });\n return await insert.run(params);\n } catch (ex) {\n return response.error({\n message: ex.message,\n code: ex.code || \"DECOMPRESS_ERROR\",\n data: ex.data,\n stack: ex.stack\n });\n }\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAQA,IAAAC,sCAAA,GAAAD,OAAA;AAEA,IAAAE,kCAAA,GAAAF,OAAA;AASO,MAAMG,2BAA2B,CAKxC;EAKWC,WAAWA,CAACC,MAA0C,EAAE;IAC3D,IAAI,CAACC,WAAW,GAAGD,MAAM,CAACC,WAAW;IACrC,IAAI,CAACC,MAAM,GAAGF,MAAM,CAACE,MAAM;IAC3B,IAAI,CAACC,YAAY,GAAGH,MAAM,CAACG,YAAY;EAC3C;EAEA,MAAaC,GAAGA,CAACJ,MAA+B,EAAsC;IAClF,MAAM;MAAEK,OAAO;MAAEC,QAAQ;MAAEC;IAAM,CAAC,GAAGP,MAAM;IAE3C,IAAI,CAACO,KAAK,CAACC,OAAO,EAAE;MAChB,OAAOF,QAAQ,CAACG,KAAK,CAAC;QAClBC,OAAO,
|
|
1
|
+
{"version":3,"names":["_types","require","_ImportFromUrlProcessEntriesDecompress","_ImportFromUrlProcessEntriesInsert","ImportFromUrlProcessEntries","constructor","params","fileFetcher","reader","decompressor","run","context","response","input","modelId","error","message","code","file","type","CmsImportExportFileType","ENTRIES","entryManager","cms","getEntryManager","ex","decompress","done","ImportFromUrlProcessEntriesDecompress","console","data","stack","insert","ImportFromUrlProcessEntriesInsert","exports"],"sources":["ImportFromUrlProcessEntries.ts"],"sourcesContent":["import type { Context } from \"~/types\";\nimport { CmsImportExportFileType } from \"~/types\";\nimport type {\n IImportFromUrlProcessEntries,\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n} from \"./abstractions/ImportFromUrlProcessEntries\";\nimport type { ITaskResponseResult, ITaskRunParams } from \"@webiny/tasks\";\nimport type { ICmsEntryManager } from \"@webiny/api-headless-cms/types\";\nimport { ImportFromUrlProcessEntriesDecompress } from \"~/tasks/domain/importFromUrlProcessEntries/ImportFromUrlProcessEntriesDecompress\";\nimport type { IFileFetcher } from \"~/tasks/utils/fileFetcher\";\nimport { ImportFromUrlProcessEntriesInsert } from \"./ImportFromUrlProcessEntriesInsert\";\nimport type { ICompressedFileReader, IDecompressor } from \"~/tasks/utils/decompressor\";\n\nexport interface IImportFromUrlProcessEntriesParams {\n fileFetcher: IFileFetcher;\n reader: ICompressedFileReader;\n decompressor: IDecompressor;\n}\n\nexport class ImportFromUrlProcessEntries<\n C extends Context = Context,\n I extends IImportFromUrlProcessEntriesInput = IImportFromUrlProcessEntriesInput,\n O extends IImportFromUrlProcessEntriesOutput = IImportFromUrlProcessEntriesOutput\n> implements IImportFromUrlProcessEntries<C, I, O>\n{\n private readonly fileFetcher: IFileFetcher;\n private readonly reader: ICompressedFileReader;\n private readonly decompressor: IDecompressor;\n\n public constructor(params: IImportFromUrlProcessEntriesParams) {\n this.fileFetcher = params.fileFetcher;\n this.reader = params.reader;\n this.decompressor = params.decompressor;\n }\n\n public async run(params: ITaskRunParams<C, I, O>): Promise<ITaskResponseResult<I, O>> {\n const { context, response, input } = params;\n\n if (!input.modelId) {\n return response.error({\n message: `Missing \"modelId\" in the input.`,\n code: \"MISSING_MODEL_ID\"\n });\n } else if (!input.file) {\n return response.error({\n message: `No file found in the provided data.`,\n code: \"NO_FILE_FOUND\"\n });\n } else if (input.file.type !== CmsImportExportFileType.ENTRIES) {\n return response.error({\n message: `Invalid file type. Expected \"${CmsImportExportFileType.ENTRIES}\" but got \"${input.file.type}\".`,\n code: \"INVALID_FILE_TYPE\"\n });\n }\n\n let entryManager: ICmsEntryManager;\n try {\n entryManager = await context.cms.getEntryManager(input.modelId);\n } catch (ex) {\n return response.error({\n message: `Model \"${input.modelId}\" not found.`,\n code: \"MODEL_NOT_FOUND\"\n });\n }\n\n if (!input.decompress?.done) {\n try {\n const decompress = new ImportFromUrlProcessEntriesDecompress<C, I, O>({\n reader: this.reader,\n decompressor: this.decompressor\n });\n\n return await decompress.run(params);\n } catch (ex) {\n console.error(ex);\n return response.error({\n message: ex.message,\n code: ex.code || \"DECOMPRESS_ERROR\",\n data: ex.data,\n stack: ex.stack\n });\n }\n }\n\n try {\n const insert = new ImportFromUrlProcessEntriesInsert<C, I, O>({\n entryManager,\n fileFetcher: this.fileFetcher\n });\n return await insert.run(params);\n } catch (ex) {\n return response.error({\n message: ex.message,\n code: ex.code || \"DECOMPRESS_ERROR\",\n data: ex.data,\n stack: ex.stack\n });\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/tasks/domain/importFromUrlProcessEntries/ImportFromUrlProcessEntriesDecompress.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_getFilePath","require","_error","ImportFromUrlProcessEntriesDecompress","constructor","params","reader","decompressor","run","response","input","isCloseToTimeout","isAborted","result","structuredClone","files","read","file","key","sort","a","b","uncompressedSize","length","error","message","code","extractPath","getFilePath","next","decompress","source","at","continue","done","aborted","target","path","extract","Key","WebinyError","data","ex","exports"],"sources":["ImportFromUrlProcessEntriesDecompress.ts"],"sourcesContent":["import type { ICompressedFileReader, IDecompressor } from \"~/tasks/utils/decompressor\";\nimport type {\n IImportFromUrlProcessEntriesDecompress,\n IImportFromUrlProcessEntriesDecompressRunParams,\n IImportFromUrlProcessEntriesDecompressRunResult\n} from \"./abstractions/ImportFromUrlProcessEntriesDecompress\";\nimport type {\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n} from \"./abstractions/ImportFromUrlProcessEntries\";\nimport { getFilePath } from \"~/tasks/utils/helpers/getFilePath\";\nimport type { Context } from \"~/types\";\nimport { WebinyError } from \"@webiny/error\";\n\nexport interface IImportFromUrlProcessEntriesDecompressParams {\n reader: ICompressedFileReader;\n decompressor: IDecompressor;\n}\n\nexport class ImportFromUrlProcessEntriesDecompress<\n C extends Context = Context,\n I extends IImportFromUrlProcessEntriesInput = IImportFromUrlProcessEntriesInput,\n O extends IImportFromUrlProcessEntriesOutput = IImportFromUrlProcessEntriesOutput\n> implements IImportFromUrlProcessEntriesDecompress<C, I, O>\n{\n private readonly reader: ICompressedFileReader;\n private readonly decompressor: IDecompressor;\n\n public constructor(params: IImportFromUrlProcessEntriesDecompressParams) {\n this.reader = params.reader;\n this.decompressor = params.decompressor;\n }\n\n public async run(\n params: IImportFromUrlProcessEntriesDecompressRunParams<C, I, O>\n ): Promise<IImportFromUrlProcessEntriesDecompressRunResult<I, O>> {\n const { response, input, isCloseToTimeout, isAborted } = params;\n const result = structuredClone<I>(input);\n\n const files = (await this.reader.read(result.file.key)).sort((a, b) => {\n return a.uncompressedSize - b.uncompressedSize;\n });\n if (files.length === 0) {\n return response.error({\n message: `No files found in the compressed archive.`,\n code: \"NO_FILES_FOUND\"\n });\n }\n\n const extractPath = getFilePath(result.file.key);\n\n while (true) {\n const next = result.decompress?.next || 0;\n const source = files.at(next);\n if (!source) {\n return response.continue({\n ...result,\n decompress: {\n ...result.decompress,\n done: true\n }\n });\n } else if (isAborted()) {\n return response.aborted();\n } else if (isCloseToTimeout() || result.decompress?.done) {\n return response.continue({\n ...result\n });\n }\n\n try {\n const target = `extracted/${extractPath.path}/${source.path}`;\n const file = await this.decompressor.extract({\n source,\n target\n });\n if (!file.Key) {\n throw new WebinyError({\n message: `Could not upload the file \"${source.path}\".`,\n code: \"FILE_NOT_UPLOAD\",\n data: {\n source: source.path,\n target\n }\n });\n }\n result.decompress = {\n ...result.decompress,\n next: next + 1,\n files: [...(result.decompress?.files || []), file.Key]\n };\n } catch (ex) {\n return response.error(ex);\n }\n }\n }\n}\n"],"mappings":";;;;;;AAUA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAOO,MAAME,qCAAqC,CAKlD;EAIWC,WAAWA,CAACC,MAAoD,EAAE;IACrE,IAAI,CAACC,MAAM,GAAGD,MAAM,CAACC,MAAM;IAC3B,IAAI,CAACC,YAAY,GAAGF,MAAM,CAACE,YAAY;EAC3C;EAEA,MAAaC,GAAGA,CACZH,MAAgE,EACF;IAC9D,MAAM;MAAEI,QAAQ;MAAEC,KAAK;MAAEC,gBAAgB;MAAEC;IAAU,CAAC,GAAGP,MAAM;IAC/D,MAAMQ,MAAM,GAAGC,eAAe,CAAIJ,KAAK,CAAC;IAExC,MAAMK,KAAK,GAAG,CAAC,MAAM,IAAI,CAACT,MAAM,CAACU,IAAI,CAACH,MAAM,CAACI,IAAI,CAACC,GAAG,CAAC,EAAEC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;MACnE,OAAOD,CAAC,CAACE,gBAAgB,GAAGD,CAAC,CAACC,gBAAgB;IAClD,CAAC,CAAC;IACF,IAAIP,KAAK,CAACQ,MAAM,KAAK,CAAC,EAAE;MACpB,OAAOd,QAAQ,CAACe,KAAK,CAAC;QAClBC,OAAO,
|
|
1
|
+
{"version":3,"names":["_getFilePath","require","_error","ImportFromUrlProcessEntriesDecompress","constructor","params","reader","decompressor","run","response","input","isCloseToTimeout","isAborted","result","structuredClone","files","read","file","key","sort","a","b","uncompressedSize","length","error","message","code","extractPath","getFilePath","next","decompress","source","at","continue","done","aborted","target","path","extract","Key","WebinyError","data","ex","exports"],"sources":["ImportFromUrlProcessEntriesDecompress.ts"],"sourcesContent":["import type { ICompressedFileReader, IDecompressor } from \"~/tasks/utils/decompressor\";\nimport type {\n IImportFromUrlProcessEntriesDecompress,\n IImportFromUrlProcessEntriesDecompressRunParams,\n IImportFromUrlProcessEntriesDecompressRunResult\n} from \"./abstractions/ImportFromUrlProcessEntriesDecompress\";\nimport type {\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n} from \"./abstractions/ImportFromUrlProcessEntries\";\nimport { getFilePath } from \"~/tasks/utils/helpers/getFilePath\";\nimport type { Context } from \"~/types\";\nimport { WebinyError } from \"@webiny/error\";\n\nexport interface IImportFromUrlProcessEntriesDecompressParams {\n reader: ICompressedFileReader;\n decompressor: IDecompressor;\n}\n\nexport class ImportFromUrlProcessEntriesDecompress<\n C extends Context = Context,\n I extends IImportFromUrlProcessEntriesInput = IImportFromUrlProcessEntriesInput,\n O extends IImportFromUrlProcessEntriesOutput = IImportFromUrlProcessEntriesOutput\n> implements IImportFromUrlProcessEntriesDecompress<C, I, O>\n{\n private readonly reader: ICompressedFileReader;\n private readonly decompressor: IDecompressor;\n\n public constructor(params: IImportFromUrlProcessEntriesDecompressParams) {\n this.reader = params.reader;\n this.decompressor = params.decompressor;\n }\n\n public async run(\n params: IImportFromUrlProcessEntriesDecompressRunParams<C, I, O>\n ): Promise<IImportFromUrlProcessEntriesDecompressRunResult<I, O>> {\n const { response, input, isCloseToTimeout, isAborted } = params;\n const result = structuredClone<I>(input);\n\n const files = (await this.reader.read(result.file.key)).sort((a, b) => {\n return a.uncompressedSize - b.uncompressedSize;\n });\n if (files.length === 0) {\n return response.error({\n message: `No files found in the compressed archive.`,\n code: \"NO_FILES_FOUND\"\n });\n }\n\n const extractPath = getFilePath(result.file.key);\n\n while (true) {\n const next = result.decompress?.next || 0;\n const source = files.at(next);\n if (!source) {\n return response.continue({\n ...result,\n decompress: {\n ...result.decompress,\n done: true\n }\n });\n } else if (isAborted()) {\n return response.aborted();\n } else if (isCloseToTimeout() || result.decompress?.done) {\n return response.continue({\n ...result\n });\n }\n\n try {\n const target = `extracted/${extractPath.path}/${source.path}`;\n const file = await this.decompressor.extract({\n source,\n target\n });\n if (!file.Key) {\n throw new WebinyError({\n message: `Could not upload the file \"${source.path}\".`,\n code: \"FILE_NOT_UPLOAD\",\n data: {\n source: source.path,\n target\n }\n });\n }\n result.decompress = {\n ...result.decompress,\n next: next + 1,\n files: [...(result.decompress?.files || []), file.Key]\n };\n } catch (ex) {\n return response.error(ex);\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|