@webiny/api-headless-cms-import-export 6.2.0 → 6.3.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.
Files changed (36) hide show
  1. package/crud/useCases/validateImportFromUrlIntegrity/ValidateImportFromUrlIntegrityUseCase.js.map +1 -1
  2. package/features/ExportContentAssetsTask/ExportContentAssets.js.map +1 -1
  3. package/features/ExportContentAssetsTask/ExportContentAssetsTask.js.map +1 -1
  4. package/features/ExportContentAssetsTask/feature.d.ts +4 -1
  5. package/features/ExportContentEntriesControllerTask/ExportContentEntriesController.js.map +1 -1
  6. package/features/ExportContentEntriesControllerTask/ExportContentEntriesControllerTask.js.map +1 -1
  7. package/features/ExportContentEntriesControllerTask/feature.d.ts +4 -1
  8. package/features/ExportContentEntriesTask/ExportContentEntries.js.map +1 -1
  9. package/features/ExportContentEntriesTask/ExportContentEntriesTask.js.map +1 -1
  10. package/features/ExportContentEntriesTask/feature.d.ts +4 -1
  11. package/features/ImportFromUrlControllerTask/ImportFromUrlController.js.map +1 -1
  12. package/features/ImportFromUrlControllerTask/ImportFromUrlControllerTask.js.map +1 -1
  13. package/features/ImportFromUrlControllerTask/feature.d.ts +4 -1
  14. package/features/ImportFromUrlDownloadTask/ImportFromUrlDownload.js.map +1 -1
  15. package/features/ImportFromUrlDownloadTask/ImportFromUrlDownloadTask.js.map +1 -1
  16. package/features/ImportFromUrlDownloadTask/feature.d.ts +4 -1
  17. package/features/ImportFromUrlProcessAssetsTask/ImportFromUrlProcessAssetsTask.js.map +1 -1
  18. package/features/ImportFromUrlProcessAssetsTask/feature.d.ts +4 -1
  19. package/features/ImportFromUrlProcessAssetsTask/importFromUrlProcessAssets/ImportFromUrlProcessAssets.js.map +1 -1
  20. package/features/ImportFromUrlProcessEntriesTask/ImportFromUrlProcessEntriesTask.js.map +1 -1
  21. package/features/ImportFromUrlProcessEntriesTask/feature.d.ts +4 -1
  22. package/features/ImportFromUrlProcessEntriesTask/importFromUrlProcessEntries/ImportFromUrlProcessEntries.js.map +1 -1
  23. package/features/ImportFromUrlProcessEntriesTask/importFromUrlProcessEntries/ImportFromUrlProcessEntriesDecompress.js.map +1 -1
  24. package/features/ImportFromUrlProcessEntriesTask/importFromUrlProcessEntries/ImportFromUrlProcessEntriesInsert.js.map +1 -1
  25. package/features/ValidateImportFromUrlTask/ValidateImportFromUrl.js.map +1 -1
  26. package/features/ValidateImportFromUrlTask/ValidateImportFromUrlTask.js.map +1 -1
  27. package/features/ValidateImportFromUrlTask/feature.d.ts +4 -1
  28. package/package.json +20 -20
  29. package/tasks/domain/importFromUrlControllerSteps/ImportFromUrlControllerDownloadStep.js.map +1 -1
  30. package/tasks/domain/importFromUrlControllerSteps/ImportFromUrlControllerProcessAssetsStep.js.map +1 -1
  31. package/tasks/domain/importFromUrlControllerSteps/ImportFromUrlControllerProcessEntriesStep.js.map +1 -1
  32. package/tasks/utils/cmsAssetsZipper/CmsAssetsZipperExecuteContinueWithoutResult.js.map +1 -1
  33. package/tasks/utils/cmsAssetsZipper/CmsAssetsZipperExecuteDoneWithoutResult.js.map +1 -1
  34. package/tasks/utils/entryAssets/EntryAssetsResolver.js +1 -0
  35. package/tasks/utils/entryAssets/EntryAssetsResolver.js.map +1 -1
  36. package/types.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["CmsImportExportFileType","MANIFEST_JSON","getFilePath","WebinyError","GetFileUseCase","UpdateFileUseCase","CreateFileUseCase","ImportFromUrlProcessAssets","constructor","params","context","fileFetcher","reader","decompressor","run","input","controller","getFile","container","resolve","createFile","updateFile","maxInsertErrors","modelId","response","error","message","code","file","type","ASSETS","recordExists","id","result","execute","isOk","structuredClone","errors","sources","read","key","length","manifest","readManifest","ex","console","runtime","isCloseToTimeout","continue","isAborted","aborted","data","record","takeNextAssetRecord","lastAsset","done","source","find","path","push","existsPhysically","exists","override","log","extract","target","Key","updateResult","isFail","createResult","size","name","extensions","location","tags","extractPath","Error","json","JSON","parse","assets","lastIndex","findIndex","asset"],"sources":["ImportFromUrlProcessAssets.ts"],"sourcesContent":["import type {\n IImportFromUrlProcessAssets,\n IImportFromUrlProcessAssetsInput,\n IImportFromUrlProcessAssetsOutput\n} from \"./abstractions/ImportFromUrlProcessAssets.js\";\nimport type { Context } from \"~/types.js\";\nimport { CmsImportExportFileType } from \"~/types.js\";\nimport type { IFileFetcher } from \"~/tasks/utils/fileFetcher/index.js\";\nimport type {\n ICompressedFileReader,\n IDecompressor,\n IUnzipperFile\n} from \"~/tasks/utils/decompressor/index.js\";\nimport { MANIFEST_JSON } from \"~/tasks/constants.js\";\nimport { getFilePath } from \"~/tasks/utils/helpers/getFilePath.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport type { ICmsAssetsManifestJson } from \"~/tasks/utils/types.js\";\nimport type { IResolvedAsset } from \"~/tasks/utils/entryAssets/index.js\";\nimport { GetFileUseCase } from \"@webiny/api-file-manager/features/file/GetFile/index.js\";\nimport { UpdateFileUseCase } from \"@webiny/api-file-manager/features/file/UpdateFile/index.js\";\nimport { CreateFileUseCase } from \"@webiny/api-file-manager/features/file/CreateFile/index.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\nexport interface IImportFromUrlProcessAssetsParams {\n context: Context;\n fileFetcher: IFileFetcher;\n reader: ICompressedFileReader;\n decompressor: IDecompressor;\n}\n\nexport class ImportFromUrlProcessAssets<\n I extends IImportFromUrlProcessAssetsInput = IImportFromUrlProcessAssetsInput,\n O extends IImportFromUrlProcessAssetsOutput = IImportFromUrlProcessAssetsOutput\n> implements IImportFromUrlProcessAssets<I, O>\n{\n private readonly context: Context;\n private readonly fileFetcher: IFileFetcher;\n private readonly reader: ICompressedFileReader;\n private readonly decompressor: IDecompressor;\n\n public constructor(params: IImportFromUrlProcessAssetsParams) {\n this.context = params.context;\n this.fileFetcher = params.fileFetcher;\n this.reader = params.reader;\n this.decompressor = params.decompressor;\n }\n\n public async run(params: TaskDefinition.RunParams<I, O>) {\n const { input, controller } = params;\n const getFile = this.context.container.resolve(GetFileUseCase);\n const createFile = this.context.container.resolve(CreateFileUseCase);\n const updateFile = this.context.container.resolve(UpdateFileUseCase);\n\n const maxInsertErrors = input.maxInsertErrors || 100;\n\n if (!input.modelId) {\n return controller.response.error({\n message: `Missing \"modelId\" in the input.`,\n code: \"MISSING_MODEL_ID\"\n });\n } else if (!input.file) {\n return controller.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 controller.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 getFile.execute(id);\n return result.isOk();\n } catch {\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 controller.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 controller.response.error(ex);\n }\n\n while (true) {\n if (controller.runtime.isCloseToTimeout()) {\n return controller.response.continue(result);\n } else if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n } else if (result.errors.length > maxInsertErrors) {\n return controller.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 controller.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 const updateResult = await updateFile.execute(record);\n\n if (updateResult.isFail()) {\n result.errors.push({\n file: record.key,\n message: updateResult.error.message\n });\n }\n\n continue;\n }\n /**\n * Create a new file record.\n */\n const createResult = await createFile.execute({\n ...record,\n id: record.id,\n key: record.key,\n size: record.size,\n type: record.type,\n name: record.name,\n extensions: record.extensions,\n location: record.location,\n tags: record.tags\n });\n\n if (createResult.isFail()) {\n result.errors.push({\n file: record.key,\n message: createResult.error.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":["CmsImportExportFileType","MANIFEST_JSON","getFilePath","WebinyError","GetFileUseCase","UpdateFileUseCase","CreateFileUseCase","ImportFromUrlProcessAssets","constructor","params","context","fileFetcher","reader","decompressor","run","input","controller","getFile","container","resolve","createFile","updateFile","maxInsertErrors","modelId","response","error","message","code","file","type","ASSETS","recordExists","id","result","execute","isOk","structuredClone","errors","sources","read","key","length","manifest","readManifest","ex","console","runtime","isCloseToTimeout","continue","isAborted","aborted","data","record","takeNextAssetRecord","lastAsset","done","source","find","path","push","existsPhysically","exists","override","log","extract","target","Key","updateResult","isFail","createResult","size","name","extensions","location","tags","extractPath","Error","json","JSON","parse","assets","lastIndex","findIndex","asset"],"sources":["ImportFromUrlProcessAssets.ts"],"sourcesContent":["import type {\n IImportFromUrlProcessAssets,\n IImportFromUrlProcessAssetsInput,\n IImportFromUrlProcessAssetsOutput\n} from \"./abstractions/ImportFromUrlProcessAssets.js\";\nimport type { Context } from \"~/types.js\";\nimport { CmsImportExportFileType } from \"~/types.js\";\nimport type { IFileFetcher } from \"~/tasks/utils/fileFetcher/index.js\";\nimport type {\n ICompressedFileReader,\n IDecompressor,\n IUnzipperFile\n} from \"~/tasks/utils/decompressor/index.js\";\nimport { MANIFEST_JSON } from \"~/tasks/constants.js\";\nimport { getFilePath } from \"~/tasks/utils/helpers/getFilePath.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport type { ICmsAssetsManifestJson } from \"~/tasks/utils/types.js\";\nimport type { IResolvedAsset } from \"~/tasks/utils/entryAssets/index.js\";\nimport { GetFileUseCase } from \"@webiny/api-file-manager/features/file/GetFile/index.js\";\nimport { UpdateFileUseCase } from \"@webiny/api-file-manager/features/file/UpdateFile/index.js\";\nimport { CreateFileUseCase } from \"@webiny/api-file-manager/features/file/CreateFile/index.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\nexport interface IImportFromUrlProcessAssetsParams {\n context: Context;\n fileFetcher: IFileFetcher;\n reader: ICompressedFileReader;\n decompressor: IDecompressor;\n}\n\nexport class ImportFromUrlProcessAssets<\n I extends IImportFromUrlProcessAssetsInput = IImportFromUrlProcessAssetsInput,\n O extends IImportFromUrlProcessAssetsOutput = IImportFromUrlProcessAssetsOutput\n> implements IImportFromUrlProcessAssets<I, O> {\n private readonly context: Context;\n private readonly fileFetcher: IFileFetcher;\n private readonly reader: ICompressedFileReader;\n private readonly decompressor: IDecompressor;\n\n public constructor(params: IImportFromUrlProcessAssetsParams) {\n this.context = params.context;\n this.fileFetcher = params.fileFetcher;\n this.reader = params.reader;\n this.decompressor = params.decompressor;\n }\n\n public async run(params: TaskDefinition.RunParams<I, O>) {\n const { input, controller } = params;\n const getFile = this.context.container.resolve(GetFileUseCase);\n const createFile = this.context.container.resolve(CreateFileUseCase);\n const updateFile = this.context.container.resolve(UpdateFileUseCase);\n\n const maxInsertErrors = input.maxInsertErrors || 100;\n\n if (!input.modelId) {\n return controller.response.error({\n message: `Missing \"modelId\" in the input.`,\n code: \"MISSING_MODEL_ID\"\n });\n } else if (!input.file) {\n return controller.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 controller.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 getFile.execute(id);\n return result.isOk();\n } catch {\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 controller.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 controller.response.error(ex);\n }\n\n while (true) {\n if (controller.runtime.isCloseToTimeout()) {\n return controller.response.continue(result);\n } else if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n } else if (result.errors.length > maxInsertErrors) {\n return controller.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 controller.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 const updateResult = await updateFile.execute(record);\n\n if (updateResult.isFail()) {\n result.errors.push({\n file: record.key,\n message: updateResult.error.message\n });\n }\n\n continue;\n }\n /**\n * Create a new file record.\n */\n const createResult = await createFile.execute({\n ...record,\n id: record.id,\n key: record.key,\n size: record.size,\n type: record.type,\n name: record.name,\n extensions: record.extensions,\n location: record.location,\n tags: record.tags\n });\n\n if (createResult.isFail()) {\n result.errors.push({\n file: record.key,\n message: createResult.error.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":["TaskDefinition","CmsContext","IMPORT_FROM_URL_PROCESS_ENTRIES_TASK","ImportFromUrlProcessEntriesTaskDefinition","id","title","maxIterations","isPrivate","description","constructor","context","run","params","createImportFromUrlProcessEntries","runner","ex","controller","response","error","ImportFromUrlProcessEntriesTask","createImplementation","implementation","dependencies"],"sources":["ImportFromUrlProcessEntriesTask.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { CmsContext } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { IMPORT_FROM_URL_PROCESS_ENTRIES_TASK } from \"~/tasks/constants.js\";\nimport type { Context } from \"~/types.js\";\nimport type {\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n} from \"./importFromUrlProcessEntries/abstractions/ImportFromUrlProcessEntries.js\";\n\ntype IRunParams = TaskDefinition.RunParams<\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n>;\n\nclass ImportFromUrlProcessEntriesTaskDefinition\n implements\n TaskDefinition.Interface<\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n >\n{\n id = IMPORT_FROM_URL_PROCESS_ENTRIES_TASK;\n title = \"Import from URL List - Process entries\";\n maxIterations = 500;\n isPrivate = true;\n description = \"Process entries import.\";\n\n constructor(private context: CmsContext.Interface) {}\n\n async run(params: IRunParams) {\n const { createImportFromUrlProcessEntries } = await import(\n \"./createImportFromUrlProcessEntries.js\"\n );\n\n try {\n const runner = createImportFromUrlProcessEntries(this.context as Context);\n return await runner.run(params);\n } catch (ex) {\n return params.controller.response.error(ex);\n }\n }\n}\n\nexport const ImportFromUrlProcessEntriesTask = TaskDefinition.createImplementation({\n implementation: ImportFromUrlProcessEntriesTaskDefinition,\n dependencies: [CmsContext]\n});\n"],"mappings":"AAAA,SAASA,cAAc,QAAQ,wDAAwD;AACvF,SAASC,UAAU,QAAQ,0DAA0D;AACrF,SAASC,oCAAoC;AAY7C,MAAMC,yCAAyC,CAM/C;EACIC,EAAE,GAAGF,oCAAoC;EACzCG,KAAK,GAAG,wCAAwC;EAChDC,aAAa,GAAG,GAAG;EACnBC,SAAS,GAAG,IAAI;EAChBC,WAAW,GAAG,yBAAyB;EAEvCC,WAAWA,CAASC,OAA6B,EAAE;IAAA,KAA/BA,OAA6B,GAA7BA,OAA6B;EAAG;EAEpD,MAAMC,GAAGA,CAACC,MAAkB,EAAE;IAC1B,MAAM;MAAEC;IAAkC,CAAC,GAAG,MAAM,MAAM,yCAE1D,CAAC;IAED,IAAI;MACA,MAAMC,MAAM,GAAGD,iCAAiC,CAAC,IAAI,CAACH,OAAkB,CAAC;MACzE,OAAO,MAAMI,MAAM,CAACH,GAAG,CAACC,MAAM,CAAC;IACnC,CAAC,CAAC,OAAOG,EAAE,EAAE;MACT,OAAOH,MAAM,CAACI,UAAU,CAACC,QAAQ,CAACC,KAAK,CAACH,EAAE,CAAC;IAC/C;EACJ;AACJ;AAEA,OAAO,MAAMI,+BAA+B,GAAGnB,cAAc,CAACoB,oBAAoB,CAAC;EAC/EC,cAAc,EAAElB,yCAAyC;EACzDmB,YAAY,EAAE,CAACrB,UAAU;AAC7B,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["TaskDefinition","CmsContext","IMPORT_FROM_URL_PROCESS_ENTRIES_TASK","ImportFromUrlProcessEntriesTaskDefinition","id","title","maxIterations","isPrivate","description","constructor","context","run","params","createImportFromUrlProcessEntries","runner","ex","controller","response","error","ImportFromUrlProcessEntriesTask","createImplementation","implementation","dependencies"],"sources":["ImportFromUrlProcessEntriesTask.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { CmsContext } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { IMPORT_FROM_URL_PROCESS_ENTRIES_TASK } from \"~/tasks/constants.js\";\nimport type { Context } from \"~/types.js\";\nimport type {\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n} from \"./importFromUrlProcessEntries/abstractions/ImportFromUrlProcessEntries.js\";\n\ntype IRunParams = TaskDefinition.RunParams<\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n>;\n\nclass ImportFromUrlProcessEntriesTaskDefinition implements TaskDefinition.Interface<\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n> {\n id = IMPORT_FROM_URL_PROCESS_ENTRIES_TASK;\n title = \"Import from URL List - Process entries\";\n maxIterations = 500;\n isPrivate = true;\n description = \"Process entries import.\";\n\n constructor(private context: CmsContext.Interface) {}\n\n async run(params: IRunParams) {\n const { createImportFromUrlProcessEntries } =\n await import(\"./createImportFromUrlProcessEntries.js\");\n\n try {\n const runner = createImportFromUrlProcessEntries(this.context as Context);\n return await runner.run(params);\n } catch (ex) {\n return params.controller.response.error(ex);\n }\n }\n}\n\nexport const ImportFromUrlProcessEntriesTask = TaskDefinition.createImplementation({\n implementation: ImportFromUrlProcessEntriesTaskDefinition,\n dependencies: [CmsContext]\n});\n"],"mappings":"AAAA,SAASA,cAAc,QAAQ,wDAAwD;AACvF,SAASC,UAAU,QAAQ,0DAA0D;AACrF,SAASC,oCAAoC;AAY7C,MAAMC,yCAAyC,CAG7C;EACEC,EAAE,GAAGF,oCAAoC;EACzCG,KAAK,GAAG,wCAAwC;EAChDC,aAAa,GAAG,GAAG;EACnBC,SAAS,GAAG,IAAI;EAChBC,WAAW,GAAG,yBAAyB;EAEvCC,WAAWA,CAASC,OAA6B,EAAE;IAAA,KAA/BA,OAA6B,GAA7BA,OAA6B;EAAG;EAEpD,MAAMC,GAAGA,CAACC,MAAkB,EAAE;IAC1B,MAAM;MAAEC;IAAkC,CAAC,GACvC,MAAM,MAAM,yCAAyC,CAAC;IAE1D,IAAI;MACA,MAAMC,MAAM,GAAGD,iCAAiC,CAAC,IAAI,CAACH,OAAkB,CAAC;MACzE,OAAO,MAAMI,MAAM,CAACH,GAAG,CAACC,MAAM,CAAC;IACnC,CAAC,CAAC,OAAOG,EAAE,EAAE;MACT,OAAOH,MAAM,CAACI,UAAU,CAACC,QAAQ,CAACC,KAAK,CAACH,EAAE,CAAC;IAC/C;EACJ;AACJ;AAEA,OAAO,MAAMI,+BAA+B,GAAGnB,cAAc,CAACoB,oBAAoB,CAAC;EAC/EC,cAAc,EAAElB,yCAAyC;EACzDmB,YAAY,EAAE,CAACrB,UAAU;AAC7B,CAAC,CAAC","ignoreList":[]}
@@ -1 +1,4 @@
1
- export declare const ImportFromUrlProcessEntriesTaskFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
1
+ export declare const ImportFromUrlProcessEntriesTaskFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -1 +1 @@
1
- {"version":3,"names":["CmsImportExportFileType","ImportFromUrlProcessEntriesDecompress","ImportFromUrlProcessEntriesInsert","GetModelUseCase","CreateEntryUseCase","ImportFromUrlProcessEntries","constructor","params","context","fileFetcher","reader","decompressor","run","input","controller","getModel","container","resolve","createEntry","modelId","response","error","message","code","file","type","ENTRIES","modelResult","execute","isFail","decompress","done","ex","console","data","stack","insert","model","value"],"sources":["ImportFromUrlProcessEntries.ts"],"sourcesContent":["import type { Context } from \"~/types.js\";\nimport { CmsImportExportFileType } from \"~/types.js\";\nimport type {\n IImportFromUrlProcessEntries,\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n} from \"./abstractions/ImportFromUrlProcessEntries.js\";\nimport { ImportFromUrlProcessEntriesDecompress } from \"./ImportFromUrlProcessEntriesDecompress.js\";\nimport type { IFileFetcher } from \"~/tasks/utils/fileFetcher/index.js\";\nimport { ImportFromUrlProcessEntriesInsert } from \"./ImportFromUrlProcessEntriesInsert.js\";\nimport type { ICompressedFileReader, IDecompressor } from \"~/tasks/utils/decompressor/index.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { CreateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/CreateEntry/index.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\nexport interface IImportFromUrlProcessEntriesParams {\n context: Context;\n fileFetcher: IFileFetcher;\n reader: ICompressedFileReader;\n decompressor: IDecompressor;\n}\n\nexport class ImportFromUrlProcessEntries<\n I extends IImportFromUrlProcessEntriesInput = IImportFromUrlProcessEntriesInput,\n O extends IImportFromUrlProcessEntriesOutput = IImportFromUrlProcessEntriesOutput\n> implements IImportFromUrlProcessEntries<I, O>\n{\n private readonly context: Context;\n private readonly fileFetcher: IFileFetcher;\n private readonly reader: ICompressedFileReader;\n private readonly decompressor: IDecompressor;\n\n public constructor(params: IImportFromUrlProcessEntriesParams) {\n this.context = params.context;\n this.fileFetcher = params.fileFetcher;\n this.reader = params.reader;\n this.decompressor = params.decompressor;\n }\n\n public async run(params: TaskDefinition.RunParams<I, O>) {\n const { input, controller } = params;\n\n const getModel = this.context.container.resolve(GetModelUseCase);\n const createEntry = this.context.container.resolve(CreateEntryUseCase);\n\n if (!input.modelId) {\n return controller.response.error({\n message: `Missing \"modelId\" in the input.`,\n code: \"MISSING_MODEL_ID\"\n });\n } else if (!input.file) {\n return controller.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 controller.response.error({\n message: `Invalid file type. Expected \"${CmsImportExportFileType.ENTRIES}\" but got \"${input.file.type}\".`,\n code: \"INVALID_FILE_TYPE\"\n });\n }\n\n const modelResult = await getModel.execute(input.modelId);\n if (modelResult.isFail()) {\n return controller.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<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 controller.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<I, O>({\n model: modelResult.value,\n createEntry,\n fileFetcher: this.fileFetcher\n });\n return await insert.run(params);\n } catch (ex) {\n return controller.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":[]}
1
+ {"version":3,"names":["CmsImportExportFileType","ImportFromUrlProcessEntriesDecompress","ImportFromUrlProcessEntriesInsert","GetModelUseCase","CreateEntryUseCase","ImportFromUrlProcessEntries","constructor","params","context","fileFetcher","reader","decompressor","run","input","controller","getModel","container","resolve","createEntry","modelId","response","error","message","code","file","type","ENTRIES","modelResult","execute","isFail","decompress","done","ex","console","data","stack","insert","model","value"],"sources":["ImportFromUrlProcessEntries.ts"],"sourcesContent":["import type { Context } from \"~/types.js\";\nimport { CmsImportExportFileType } from \"~/types.js\";\nimport type {\n IImportFromUrlProcessEntries,\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n} from \"./abstractions/ImportFromUrlProcessEntries.js\";\nimport { ImportFromUrlProcessEntriesDecompress } from \"./ImportFromUrlProcessEntriesDecompress.js\";\nimport type { IFileFetcher } from \"~/tasks/utils/fileFetcher/index.js\";\nimport { ImportFromUrlProcessEntriesInsert } from \"./ImportFromUrlProcessEntriesInsert.js\";\nimport type { ICompressedFileReader, IDecompressor } from \"~/tasks/utils/decompressor/index.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { CreateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/CreateEntry/index.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\nexport interface IImportFromUrlProcessEntriesParams {\n context: Context;\n fileFetcher: IFileFetcher;\n reader: ICompressedFileReader;\n decompressor: IDecompressor;\n}\n\nexport class ImportFromUrlProcessEntries<\n I extends IImportFromUrlProcessEntriesInput = IImportFromUrlProcessEntriesInput,\n O extends IImportFromUrlProcessEntriesOutput = IImportFromUrlProcessEntriesOutput\n> implements IImportFromUrlProcessEntries<I, O> {\n private readonly context: Context;\n private readonly fileFetcher: IFileFetcher;\n private readonly reader: ICompressedFileReader;\n private readonly decompressor: IDecompressor;\n\n public constructor(params: IImportFromUrlProcessEntriesParams) {\n this.context = params.context;\n this.fileFetcher = params.fileFetcher;\n this.reader = params.reader;\n this.decompressor = params.decompressor;\n }\n\n public async run(params: TaskDefinition.RunParams<I, O>) {\n const { input, controller } = params;\n\n const getModel = this.context.container.resolve(GetModelUseCase);\n const createEntry = this.context.container.resolve(CreateEntryUseCase);\n\n if (!input.modelId) {\n return controller.response.error({\n message: `Missing \"modelId\" in the input.`,\n code: \"MISSING_MODEL_ID\"\n });\n } else if (!input.file) {\n return controller.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 controller.response.error({\n message: `Invalid file type. Expected \"${CmsImportExportFileType.ENTRIES}\" but got \"${input.file.type}\".`,\n code: \"INVALID_FILE_TYPE\"\n });\n }\n\n const modelResult = await getModel.execute(input.modelId);\n if (modelResult.isFail()) {\n return controller.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<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 controller.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<I, O>({\n model: modelResult.value,\n createEntry,\n fileFetcher: this.fileFetcher\n });\n return await insert.run(params);\n } catch (ex) {\n return controller.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":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["getFilePath","WebinyError","ImportFromUrlProcessEntriesDecompress","constructor","params","reader","decompressor","run","input","controller","result","structuredClone","files","read","file","key","sort","a","b","uncompressedSize","length","response","error","message","code","extractPath","next","decompress","source","at","continue","done","runtime","isAborted","aborted","isCloseToTimeout","target","path","extract","Key","data","ex"],"sources":["ImportFromUrlProcessEntriesDecompress.ts"],"sourcesContent":["import type { ICompressedFileReader, IDecompressor } from \"~/tasks/utils/decompressor/index.js\";\nimport type {\n IImportFromUrlProcessEntriesDecompress,\n IImportFromUrlProcessEntriesDecompressRunParams,\n IImportFromUrlProcessEntriesDecompressRunResult\n} from \"./abstractions/ImportFromUrlProcessEntriesDecompress.js\";\nimport type {\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n} from \"./abstractions/ImportFromUrlProcessEntries.js\";\nimport { getFilePath } from \"~/tasks/utils/helpers/getFilePath.js\";\nimport { WebinyError } from \"@webiny/error\";\n\nexport interface IImportFromUrlProcessEntriesDecompressParams {\n reader: ICompressedFileReader;\n decompressor: IDecompressor;\n}\n\nexport class ImportFromUrlProcessEntriesDecompress<\n I extends IImportFromUrlProcessEntriesInput = IImportFromUrlProcessEntriesInput,\n O extends IImportFromUrlProcessEntriesOutput = IImportFromUrlProcessEntriesOutput\n> implements IImportFromUrlProcessEntriesDecompress<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<I, O>\n ): Promise<IImportFromUrlProcessEntriesDecompressRunResult<I, O>> {\n const { input, controller } = 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 controller.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 controller.response.continue({\n ...result,\n decompress: {\n ...result.decompress,\n done: true\n }\n });\n } else if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n } else if (controller.runtime.isCloseToTimeout() || result.decompress?.done) {\n return controller.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 controller.response.error(ex);\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getFilePath","WebinyError","ImportFromUrlProcessEntriesDecompress","constructor","params","reader","decompressor","run","input","controller","result","structuredClone","files","read","file","key","sort","a","b","uncompressedSize","length","response","error","message","code","extractPath","next","decompress","source","at","continue","done","runtime","isAborted","aborted","isCloseToTimeout","target","path","extract","Key","data","ex"],"sources":["ImportFromUrlProcessEntriesDecompress.ts"],"sourcesContent":["import type { ICompressedFileReader, IDecompressor } from \"~/tasks/utils/decompressor/index.js\";\nimport type {\n IImportFromUrlProcessEntriesDecompress,\n IImportFromUrlProcessEntriesDecompressRunParams,\n IImportFromUrlProcessEntriesDecompressRunResult\n} from \"./abstractions/ImportFromUrlProcessEntriesDecompress.js\";\nimport type {\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesOutput\n} from \"./abstractions/ImportFromUrlProcessEntries.js\";\nimport { getFilePath } from \"~/tasks/utils/helpers/getFilePath.js\";\nimport { WebinyError } from \"@webiny/error\";\n\nexport interface IImportFromUrlProcessEntriesDecompressParams {\n reader: ICompressedFileReader;\n decompressor: IDecompressor;\n}\n\nexport class ImportFromUrlProcessEntriesDecompress<\n I extends IImportFromUrlProcessEntriesInput = IImportFromUrlProcessEntriesInput,\n O extends IImportFromUrlProcessEntriesOutput = IImportFromUrlProcessEntriesOutput\n> implements IImportFromUrlProcessEntriesDecompress<I, O> {\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<I, O>\n ): Promise<IImportFromUrlProcessEntriesDecompressRunResult<I, O>> {\n const { input, controller } = 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 controller.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 controller.response.continue({\n ...result,\n decompress: {\n ...result.decompress,\n done: true\n }\n });\n } else if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n } else if (controller.runtime.isCloseToTimeout() || result.decompress?.done) {\n return controller.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 controller.response.error(ex);\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["MANIFEST_JSON","ImportFromUrlProcessEntriesInsert","constructor","params","model","createEntry","fileFetcher","run","input","controller","result","structuredClone","files","decompress","filter","file","endsWith","length","response","error","message","code","data","maxInsertErrors","processed","insert","runtime","isAborted","aborted","isCloseToTimeout","continue","takeFile","output","done","readAndParse","takeNextFile","failed","key","errors","success","item","items","createResult","execute","values","isFail","console","id","push","total","read","parsed","JSON","parse","last","find","index","indexOf","next","at"],"sources":["ImportFromUrlProcessEntriesInsert.ts"],"sourcesContent":["import type {\n IImportFromUrlProcessEntriesInsert,\n IImportFromUrlProcessEntriesInsertRunParams,\n IImportFromUrlProcessEntriesInsertRunResult\n} from \"./abstractions/ImportFromUrlProcessEntriesInsert.js\";\nimport type {\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesInsertProcessedFileErrorsInput,\n IImportFromUrlProcessEntriesInsertProcessedFileInput,\n IImportFromUrlProcessEntriesOutput\n} from \"./abstractions/ImportFromUrlProcessEntries.js\";\nimport { MANIFEST_JSON } from \"~/tasks/constants.js\";\nimport type { IFileFetcher } from \"~/tasks/utils/fileFetcher/index.js\";\nimport type { ICmsEntryEntriesJson } from \"~/tasks/utils/types.js\";\nimport { CreateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/CreateEntry/index.js\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface IImportFromUrlProcessEntriesInsertParams {\n model: CmsModel;\n createEntry: CreateEntryUseCase.Interface;\n fileFetcher: IFileFetcher;\n}\n\nexport class ImportFromUrlProcessEntriesInsert<\n I extends IImportFromUrlProcessEntriesInput = IImportFromUrlProcessEntriesInput,\n O extends IImportFromUrlProcessEntriesOutput = IImportFromUrlProcessEntriesOutput\n> implements IImportFromUrlProcessEntriesInsert<I, O>\n{\n private readonly createEntry: CreateEntryUseCase.Interface;\n private readonly fileFetcher: IFileFetcher;\n private readonly model: CmsModel;\n\n public constructor(params: IImportFromUrlProcessEntriesInsertParams) {\n this.model = params.model;\n this.createEntry = params.createEntry;\n this.fileFetcher = params.fileFetcher;\n }\n\n public async run(\n params: IImportFromUrlProcessEntriesInsertRunParams<I, O>\n ): Promise<IImportFromUrlProcessEntriesInsertRunResult<I, O>> {\n const { input, controller } = params;\n\n const result = structuredClone(input);\n\n const files = (result.decompress?.files || []).filter(\n file => !file.endsWith(MANIFEST_JSON)\n );\n if (files.length === 0) {\n return controller.response.error({\n message: `No entry files found in the compressed archive.`,\n code: \"NO_FILES_FOUND\",\n data: {\n files: result.decompress?.files || []\n }\n });\n }\n\n const maxInsertErrors = result.maxInsertErrors || 10;\n\n const processed: IImportFromUrlProcessEntriesInsertProcessedFileInput[] =\n result.insert?.processed || [];\n\n while (true) {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n } else if (controller.runtime.isCloseToTimeout()) {\n return controller.response.continue({\n ...result\n });\n }\n const file = this.takeFile(files, result.insert?.file);\n if (!file) {\n const output: IImportFromUrlProcessEntriesOutput = {\n files: processed\n };\n\n return controller.response.done(output as O);\n }\n const data = await this.readAndParse(file, result);\n if (!data) {\n result.insert = {\n ...result.insert,\n file: this.takeNextFile(files, file),\n failed: [\n ...(result.insert?.failed || []),\n {\n key: file,\n message: `Failed to read and parse the file. Please check logs for more detailed information.`\n }\n ]\n };\n continue;\n }\n const errors: IImportFromUrlProcessEntriesInsertProcessedFileErrorsInput[] = [];\n\n let success = 0;\n for (const item of data.items) {\n if (errors.length >= maxInsertErrors) {\n return controller.response.error({\n message: `Max insert errors reached.`,\n code: \"MAX_INSERT_ERRORS\",\n data: {\n errors\n }\n });\n }\n\n const createResult = await this.createEntry.execute(this.model, {\n ...item,\n values: item\n });\n\n if (createResult.isFail()) {\n console.error(`Failed to insert entry \"${item.id}\"`, createResult.error);\n errors.push({\n id: item.id,\n message: createResult.error.message\n });\n } else {\n success++;\n }\n }\n processed.push({\n key: file,\n success,\n total: data.items.length,\n errors\n });\n result.insert = {\n ...result.insert,\n file: this.takeNextFile(files, file),\n processed\n };\n }\n }\n /**\n * Method reads and parses the target file.\n * In case of any error, it will log it, attach to the result parameter and return null.\n */\n private async readAndParse(key: string, result: I): Promise<ICmsEntryEntriesJson | null> {\n const data = await this.fileFetcher.read(key);\n if (!data) {\n const message = `No contents found for file \"${key}\".`;\n console.error(message);\n result.insert = {\n ...result.insert,\n failed: [\n ...(result.insert?.failed || []),\n {\n key,\n message\n }\n ]\n };\n return null;\n }\n let parsed: Partial<ICmsEntryEntriesJson>;\n try {\n parsed = JSON.parse(data);\n } catch {\n const message = `Failed to parse JSON for file \"${key}\".`;\n console.error(message);\n result.insert = {\n ...result.insert,\n failed: [\n ...(result.insert?.failed || []),\n {\n key,\n message\n }\n ]\n };\n return null;\n }\n if (!parsed.items) {\n const message = `Missing \"items\" in the parsed JSON for file \"${key}\".`;\n console.error(message);\n result.insert = {\n ...result.insert,\n failed: [\n ...(result.insert?.failed || []),\n {\n key,\n message\n }\n ]\n };\n return null;\n }\n return parsed as ICmsEntryEntriesJson;\n }\n\n private takeFile(files: string[], last?: string): string | undefined {\n if (!last) {\n return files[0];\n }\n return files.find(file => file === last);\n }\n\n private takeNextFile(files: string[], last: string): string | undefined {\n const index = files.indexOf(last);\n if (index < 0) {\n return `notFound:${last}`;\n }\n const next = files.at(index + 1);\n if (next) {\n return next;\n }\n\n return `completedWith:${last}`;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["MANIFEST_JSON","ImportFromUrlProcessEntriesInsert","constructor","params","model","createEntry","fileFetcher","run","input","controller","result","structuredClone","files","decompress","filter","file","endsWith","length","response","error","message","code","data","maxInsertErrors","processed","insert","runtime","isAborted","aborted","isCloseToTimeout","continue","takeFile","output","done","readAndParse","takeNextFile","failed","key","errors","success","item","items","createResult","execute","values","isFail","console","id","push","total","read","parsed","JSON","parse","last","find","index","indexOf","next","at"],"sources":["ImportFromUrlProcessEntriesInsert.ts"],"sourcesContent":["import type {\n IImportFromUrlProcessEntriesInsert,\n IImportFromUrlProcessEntriesInsertRunParams,\n IImportFromUrlProcessEntriesInsertRunResult\n} from \"./abstractions/ImportFromUrlProcessEntriesInsert.js\";\nimport type {\n IImportFromUrlProcessEntriesInput,\n IImportFromUrlProcessEntriesInsertProcessedFileErrorsInput,\n IImportFromUrlProcessEntriesInsertProcessedFileInput,\n IImportFromUrlProcessEntriesOutput\n} from \"./abstractions/ImportFromUrlProcessEntries.js\";\nimport { MANIFEST_JSON } from \"~/tasks/constants.js\";\nimport type { IFileFetcher } from \"~/tasks/utils/fileFetcher/index.js\";\nimport type { ICmsEntryEntriesJson } from \"~/tasks/utils/types.js\";\nimport { CreateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/CreateEntry/index.js\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface IImportFromUrlProcessEntriesInsertParams {\n model: CmsModel;\n createEntry: CreateEntryUseCase.Interface;\n fileFetcher: IFileFetcher;\n}\n\nexport class ImportFromUrlProcessEntriesInsert<\n I extends IImportFromUrlProcessEntriesInput = IImportFromUrlProcessEntriesInput,\n O extends IImportFromUrlProcessEntriesOutput = IImportFromUrlProcessEntriesOutput\n> implements IImportFromUrlProcessEntriesInsert<I, O> {\n private readonly createEntry: CreateEntryUseCase.Interface;\n private readonly fileFetcher: IFileFetcher;\n private readonly model: CmsModel;\n\n public constructor(params: IImportFromUrlProcessEntriesInsertParams) {\n this.model = params.model;\n this.createEntry = params.createEntry;\n this.fileFetcher = params.fileFetcher;\n }\n\n public async run(\n params: IImportFromUrlProcessEntriesInsertRunParams<I, O>\n ): Promise<IImportFromUrlProcessEntriesInsertRunResult<I, O>> {\n const { input, controller } = params;\n\n const result = structuredClone(input);\n\n const files = (result.decompress?.files || []).filter(\n file => !file.endsWith(MANIFEST_JSON)\n );\n if (files.length === 0) {\n return controller.response.error({\n message: `No entry files found in the compressed archive.`,\n code: \"NO_FILES_FOUND\",\n data: {\n files: result.decompress?.files || []\n }\n });\n }\n\n const maxInsertErrors = result.maxInsertErrors || 10;\n\n const processed: IImportFromUrlProcessEntriesInsertProcessedFileInput[] =\n result.insert?.processed || [];\n\n while (true) {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n } else if (controller.runtime.isCloseToTimeout()) {\n return controller.response.continue({\n ...result\n });\n }\n const file = this.takeFile(files, result.insert?.file);\n if (!file) {\n const output: IImportFromUrlProcessEntriesOutput = {\n files: processed\n };\n\n return controller.response.done(output as O);\n }\n const data = await this.readAndParse(file, result);\n if (!data) {\n result.insert = {\n ...result.insert,\n file: this.takeNextFile(files, file),\n failed: [\n ...(result.insert?.failed || []),\n {\n key: file,\n message: `Failed to read and parse the file. Please check logs for more detailed information.`\n }\n ]\n };\n continue;\n }\n const errors: IImportFromUrlProcessEntriesInsertProcessedFileErrorsInput[] = [];\n\n let success = 0;\n for (const item of data.items) {\n if (errors.length >= maxInsertErrors) {\n return controller.response.error({\n message: `Max insert errors reached.`,\n code: \"MAX_INSERT_ERRORS\",\n data: {\n errors\n }\n });\n }\n\n const createResult = await this.createEntry.execute(this.model, {\n ...item,\n values: item\n });\n\n if (createResult.isFail()) {\n console.error(`Failed to insert entry \"${item.id}\"`, createResult.error);\n errors.push({\n id: item.id,\n message: createResult.error.message\n });\n } else {\n success++;\n }\n }\n processed.push({\n key: file,\n success,\n total: data.items.length,\n errors\n });\n result.insert = {\n ...result.insert,\n file: this.takeNextFile(files, file),\n processed\n };\n }\n }\n /**\n * Method reads and parses the target file.\n * In case of any error, it will log it, attach to the result parameter and return null.\n */\n private async readAndParse(key: string, result: I): Promise<ICmsEntryEntriesJson | null> {\n const data = await this.fileFetcher.read(key);\n if (!data) {\n const message = `No contents found for file \"${key}\".`;\n console.error(message);\n result.insert = {\n ...result.insert,\n failed: [\n ...(result.insert?.failed || []),\n {\n key,\n message\n }\n ]\n };\n return null;\n }\n let parsed: Partial<ICmsEntryEntriesJson>;\n try {\n parsed = JSON.parse(data);\n } catch {\n const message = `Failed to parse JSON for file \"${key}\".`;\n console.error(message);\n result.insert = {\n ...result.insert,\n failed: [\n ...(result.insert?.failed || []),\n {\n key,\n message\n }\n ]\n };\n return null;\n }\n if (!parsed.items) {\n const message = `Missing \"items\" in the parsed JSON for file \"${key}\".`;\n console.error(message);\n result.insert = {\n ...result.insert,\n failed: [\n ...(result.insert?.failed || []),\n {\n key,\n message\n }\n ]\n };\n return null;\n }\n return parsed as ICmsEntryEntriesJson;\n }\n\n private takeFile(files: string[], last?: string): string | undefined {\n if (!last) {\n return files[0];\n }\n return files.find(file => file === last);\n }\n\n private takeNextFile(files: string[], last: string): string | undefined {\n const index = files.indexOf(last);\n if (index < 0) {\n return `notFound:${last}`;\n }\n const next = files.at(index + 1);\n if (next) {\n return next;\n }\n\n return `completedWith:${last}`;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["getImportExportFileType","prependImportPath","ValidateImportFromUrl","constructor","params","fileFetcher","fileExists","run","input","controller","files","model","results","target","get","head","checksum","type","pathname","error","fileTypeError","push","checked","key","message","code","data","size","undefined","file","url","expected","received","exists","length","response","output","modelId","filesWithErrors","filter","map","done"],"sources":["ValidateImportFromUrl.ts"],"sourcesContent":["import type {\n IValidateImportFromUrl,\n IValidateImportFromUrlInput,\n IValidateImportFromUrlOutput\n} from \"~/tasks/domain/abstractions/ValidateImportFromUrl.js\";\nimport type { ICmsImportExportValidatedFile } from \"~/types.js\";\nimport { getImportExportFileType } from \"~/tasks/utils/helpers/getImportExportFileType.js\";\nimport type { NonEmptyArray } from \"@webiny/api/types.js\";\nimport { prependImportPath } from \"~/tasks/utils/helpers/importPath.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { IExternalFileFetcher } from \"./ExternalFileFetcher/abstractions.js\";\n\nexport interface IFileExists {\n (key: string): Promise<boolean>;\n}\n\nexport interface IValidateImportFromUrlParams {\n fileFetcher: IExternalFileFetcher;\n fileExists: IFileExists;\n}\n\nexport class ValidateImportFromUrl<\n I extends IValidateImportFromUrlInput = IValidateImportFromUrlInput,\n O extends IValidateImportFromUrlOutput = IValidateImportFromUrlOutput\n> implements IValidateImportFromUrl<I, O>\n{\n private readonly fileFetcher: IExternalFileFetcher;\n private readonly fileExists: IFileExists;\n\n public constructor(params: IValidateImportFromUrlParams) {\n this.fileFetcher = params.fileFetcher;\n this.fileExists = params.fileExists;\n }\n\n public async run(params: TaskDefinition.RunParams<I, O>) {\n const { input, controller } = params;\n\n const { files = [], model } = input;\n\n const results: ICmsImportExportValidatedFile[] = [];\n\n for (const target of files) {\n const { get, head, checksum } = target;\n const { type, pathname, error: fileTypeError } = getImportExportFileType(head);\n if (fileTypeError) {\n results.push({\n checked: true,\n get,\n head,\n key: target.key,\n checksum,\n error: {\n message: \"File type not supported.\",\n code: \"FILE_TYPE_NOT_SUPPORTED\",\n data: {\n pathname,\n type\n }\n },\n size: undefined,\n type: undefined\n });\n continue;\n }\n const { file, error } = await this.fileFetcher.head(head);\n if (error) {\n results.push({\n checked: true,\n get,\n head,\n error,\n key: target.key,\n checksum,\n size: undefined,\n type: undefined\n });\n continue;\n } else if (!file) {\n results.push({\n checked: true,\n get,\n head,\n key: target.key,\n checksum,\n error: {\n message: \"File not found.\",\n code: \"FILE_NOT_FOUND\",\n data: {\n url: head\n }\n },\n size: undefined,\n type: undefined\n });\n continue;\n } else if (file.checksum !== checksum) {\n results.push({\n checked: true,\n get,\n head,\n key: target.key,\n checksum,\n error: {\n message: \"Checksum does not match.\",\n code: \"CHECKSUM_MISMATCH\",\n data: {\n expected: checksum,\n received: file.checksum\n }\n },\n size: file.size,\n type\n });\n continue;\n }\n const key = prependImportPath(target.key);\n const exists = await this.fileExists(key);\n if (exists) {\n results.push({\n checked: true,\n get,\n head,\n key: target.key,\n checksum,\n error: {\n message: \"File already exists.\",\n code: \"FILE_ALREADY_EXISTS\",\n data: {\n key\n }\n },\n size: file.size,\n type\n });\n continue;\n }\n\n results.push({\n checked: true,\n get,\n head,\n key: target.key,\n checksum,\n size: file.size,\n type\n });\n }\n if (results.length === 0) {\n return controller.response.error({\n message: \"No files found.\",\n code: \"NO_FILES_FOUND\"\n });\n }\n\n const output: IValidateImportFromUrlOutput = {\n files: results as NonEmptyArray<ICmsImportExportValidatedFile>,\n modelId: model?.modelId\n };\n const filesWithErrors = results.filter(file => !!file.error);\n if (filesWithErrors.length > 0) {\n output.error = {\n message: \"One or more files are invalid.\",\n code: \"INVALID_FILES\",\n data: {\n files: filesWithErrors.map(file => {\n return file.key;\n })\n }\n };\n }\n\n return controller.response.done(output as O);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getImportExportFileType","prependImportPath","ValidateImportFromUrl","constructor","params","fileFetcher","fileExists","run","input","controller","files","model","results","target","get","head","checksum","type","pathname","error","fileTypeError","push","checked","key","message","code","data","size","undefined","file","url","expected","received","exists","length","response","output","modelId","filesWithErrors","filter","map","done"],"sources":["ValidateImportFromUrl.ts"],"sourcesContent":["import type {\n IValidateImportFromUrl,\n IValidateImportFromUrlInput,\n IValidateImportFromUrlOutput\n} from \"~/tasks/domain/abstractions/ValidateImportFromUrl.js\";\nimport type { ICmsImportExportValidatedFile } from \"~/types.js\";\nimport { getImportExportFileType } from \"~/tasks/utils/helpers/getImportExportFileType.js\";\nimport type { NonEmptyArray } from \"@webiny/api/types.js\";\nimport { prependImportPath } from \"~/tasks/utils/helpers/importPath.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { IExternalFileFetcher } from \"./ExternalFileFetcher/abstractions.js\";\n\nexport interface IFileExists {\n (key: string): Promise<boolean>;\n}\n\nexport interface IValidateImportFromUrlParams {\n fileFetcher: IExternalFileFetcher;\n fileExists: IFileExists;\n}\n\nexport class ValidateImportFromUrl<\n I extends IValidateImportFromUrlInput = IValidateImportFromUrlInput,\n O extends IValidateImportFromUrlOutput = IValidateImportFromUrlOutput\n> implements IValidateImportFromUrl<I, O> {\n private readonly fileFetcher: IExternalFileFetcher;\n private readonly fileExists: IFileExists;\n\n public constructor(params: IValidateImportFromUrlParams) {\n this.fileFetcher = params.fileFetcher;\n this.fileExists = params.fileExists;\n }\n\n public async run(params: TaskDefinition.RunParams<I, O>) {\n const { input, controller } = params;\n\n const { files = [], model } = input;\n\n const results: ICmsImportExportValidatedFile[] = [];\n\n for (const target of files) {\n const { get, head, checksum } = target;\n const { type, pathname, error: fileTypeError } = getImportExportFileType(head);\n if (fileTypeError) {\n results.push({\n checked: true,\n get,\n head,\n key: target.key,\n checksum,\n error: {\n message: \"File type not supported.\",\n code: \"FILE_TYPE_NOT_SUPPORTED\",\n data: {\n pathname,\n type\n }\n },\n size: undefined,\n type: undefined\n });\n continue;\n }\n const { file, error } = await this.fileFetcher.head(head);\n if (error) {\n results.push({\n checked: true,\n get,\n head,\n error,\n key: target.key,\n checksum,\n size: undefined,\n type: undefined\n });\n continue;\n } else if (!file) {\n results.push({\n checked: true,\n get,\n head,\n key: target.key,\n checksum,\n error: {\n message: \"File not found.\",\n code: \"FILE_NOT_FOUND\",\n data: {\n url: head\n }\n },\n size: undefined,\n type: undefined\n });\n continue;\n } else if (file.checksum !== checksum) {\n results.push({\n checked: true,\n get,\n head,\n key: target.key,\n checksum,\n error: {\n message: \"Checksum does not match.\",\n code: \"CHECKSUM_MISMATCH\",\n data: {\n expected: checksum,\n received: file.checksum\n }\n },\n size: file.size,\n type\n });\n continue;\n }\n const key = prependImportPath(target.key);\n const exists = await this.fileExists(key);\n if (exists) {\n results.push({\n checked: true,\n get,\n head,\n key: target.key,\n checksum,\n error: {\n message: \"File already exists.\",\n code: \"FILE_ALREADY_EXISTS\",\n data: {\n key\n }\n },\n size: file.size,\n type\n });\n continue;\n }\n\n results.push({\n checked: true,\n get,\n head,\n key: target.key,\n checksum,\n size: file.size,\n type\n });\n }\n if (results.length === 0) {\n return controller.response.error({\n message: \"No files found.\",\n code: \"NO_FILES_FOUND\"\n });\n }\n\n const output: IValidateImportFromUrlOutput = {\n files: results as NonEmptyArray<ICmsImportExportValidatedFile>,\n modelId: model?.modelId\n };\n const filesWithErrors = results.filter(file => !!file.error);\n if (filesWithErrors.length > 0) {\n output.error = {\n message: \"One or more files are invalid.\",\n code: \"INVALID_FILES\",\n data: {\n files: filesWithErrors.map(file => {\n return file.key;\n })\n }\n };\n }\n\n return controller.response.done(output as O);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["TaskDefinition","VALIDATE_IMPORT_FROM_URL_INTEGRITY_TASK","ValidateImportFromUrlTaskDefinition","id","title","maxIterations","isPrivate","description","run","params","createValidateImportFromUrl","runner","ex","controller","response","error","ValidateImportFromUrlTask","createImplementation","implementation","dependencies"],"sources":["ValidateImportFromUrlTask.ts"],"sourcesContent":["import type {\n IValidateImportFromUrlInput,\n IValidateImportFromUrlOutput\n} from \"~/tasks/domain/abstractions/ValidateImportFromUrl.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { VALIDATE_IMPORT_FROM_URL_INTEGRITY_TASK } from \"~/tasks/constants.js\";\n\ntype IRunParams = TaskDefinition.RunParams<\n IValidateImportFromUrlInput,\n IValidateImportFromUrlOutput\n>;\n\nclass ValidateImportFromUrlTaskDefinition\n implements TaskDefinition.Interface<IValidateImportFromUrlInput, IValidateImportFromUrlOutput>\n{\n id = VALIDATE_IMPORT_FROM_URL_INTEGRITY_TASK;\n title = \"Validate Import from URL Integrity\";\n maxIterations = 1;\n isPrivate = true;\n description = \"Validates given URLs to verify that they are what we need to import the data.\";\n\n async run(params: IRunParams) {\n const { createValidateImportFromUrl } = await import(\n /* webpackChunkName: \"createValidateImportFromUrl\" */ \"./createValidateImportFromUrl.js\"\n );\n\n try {\n const runner = createValidateImportFromUrl();\n return await runner.run(params);\n } catch (ex) {\n return params.controller.response.error(ex);\n }\n }\n}\n\nexport const ValidateImportFromUrlTask = TaskDefinition.createImplementation({\n implementation: ValidateImportFromUrlTaskDefinition,\n dependencies: []\n});\n"],"mappings":"AAIA,SAASA,cAAc,QAAQ,wDAAwD;AACvF,SAASC,uCAAuC;AAOhD,MAAMC,mCAAmC,CAEzC;EACIC,EAAE,GAAGF,uCAAuC;EAC5CG,KAAK,GAAG,oCAAoC;EAC5CC,aAAa,GAAG,CAAC;EACjBC,SAAS,GAAG,IAAI;EAChBC,WAAW,GAAG,+EAA+E;EAE7F,MAAMC,GAAGA,CAACC,MAAkB,EAAE;IAC1B,MAAM;MAAEC;IAA4B,CAAC,GAAG,MAAM,MAAM,CAChD,uFACJ,CAAC;IAED,IAAI;MACA,MAAMC,MAAM,GAAGD,2BAA2B,CAAC,CAAC;MAC5C,OAAO,MAAMC,MAAM,CAACH,GAAG,CAACC,MAAM,CAAC;IACnC,CAAC,CAAC,OAAOG,EAAE,EAAE;MACT,OAAOH,MAAM,CAACI,UAAU,CAACC,QAAQ,CAACC,KAAK,CAACH,EAAE,CAAC;IAC/C;EACJ;AACJ;AAEA,OAAO,MAAMI,yBAAyB,GAAGhB,cAAc,CAACiB,oBAAoB,CAAC;EACzEC,cAAc,EAAEhB,mCAAmC;EACnDiB,YAAY,EAAE;AAClB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["TaskDefinition","VALIDATE_IMPORT_FROM_URL_INTEGRITY_TASK","ValidateImportFromUrlTaskDefinition","id","title","maxIterations","isPrivate","description","run","params","createValidateImportFromUrl","runner","ex","controller","response","error","ValidateImportFromUrlTask","createImplementation","implementation","dependencies"],"sources":["ValidateImportFromUrlTask.ts"],"sourcesContent":["import type {\n IValidateImportFromUrlInput,\n IValidateImportFromUrlOutput\n} from \"~/tasks/domain/abstractions/ValidateImportFromUrl.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { VALIDATE_IMPORT_FROM_URL_INTEGRITY_TASK } from \"~/tasks/constants.js\";\n\ntype IRunParams = TaskDefinition.RunParams<\n IValidateImportFromUrlInput,\n IValidateImportFromUrlOutput\n>;\n\nclass ValidateImportFromUrlTaskDefinition implements TaskDefinition.Interface<\n IValidateImportFromUrlInput,\n IValidateImportFromUrlOutput\n> {\n id = VALIDATE_IMPORT_FROM_URL_INTEGRITY_TASK;\n title = \"Validate Import from URL Integrity\";\n maxIterations = 1;\n isPrivate = true;\n description = \"Validates given URLs to verify that they are what we need to import the data.\";\n\n async run(params: IRunParams) {\n const { createValidateImportFromUrl } = await import(\n /* webpackChunkName: \"createValidateImportFromUrl\" */ \"./createValidateImportFromUrl.js\"\n );\n\n try {\n const runner = createValidateImportFromUrl();\n return await runner.run(params);\n } catch (ex) {\n return params.controller.response.error(ex);\n }\n }\n}\n\nexport const ValidateImportFromUrlTask = TaskDefinition.createImplementation({\n implementation: ValidateImportFromUrlTaskDefinition,\n dependencies: []\n});\n"],"mappings":"AAIA,SAASA,cAAc,QAAQ,wDAAwD;AACvF,SAASC,uCAAuC;AAOhD,MAAMC,mCAAmC,CAGvC;EACEC,EAAE,GAAGF,uCAAuC;EAC5CG,KAAK,GAAG,oCAAoC;EAC5CC,aAAa,GAAG,CAAC;EACjBC,SAAS,GAAG,IAAI;EAChBC,WAAW,GAAG,+EAA+E;EAE7F,MAAMC,GAAGA,CAACC,MAAkB,EAAE;IAC1B,MAAM;MAAEC;IAA4B,CAAC,GAAG,MAAM,MAAM,CAChD,uFACJ,CAAC;IAED,IAAI;MACA,MAAMC,MAAM,GAAGD,2BAA2B,CAAC,CAAC;MAC5C,OAAO,MAAMC,MAAM,CAACH,GAAG,CAACC,MAAM,CAAC;IACnC,CAAC,CAAC,OAAOG,EAAE,EAAE;MACT,OAAOH,MAAM,CAACI,UAAU,CAACC,QAAQ,CAACC,KAAK,CAACH,EAAE,CAAC;IAC/C;EACJ;AACJ;AAEA,OAAO,MAAMI,yBAAyB,GAAGhB,cAAc,CAACiB,oBAAoB,CAAC;EACzEC,cAAc,EAAEhB,mCAAmC;EACnDiB,YAAY,EAAE;AAClB,CAAC,CAAC","ignoreList":[]}
@@ -1 +1,4 @@
1
- export declare const ValidateImportFromUrlTaskFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
1
+ export declare const ValidateImportFromUrlTaskFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms-import-export",
3
- "version": "6.2.0",
3
+ "version": "6.3.0-beta.1",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "description": "Import / Export for Webiny Headless CMS",
@@ -14,17 +14,17 @@
14
14
  },
15
15
  "license": "MIT",
16
16
  "dependencies": {
17
- "@smithy/node-http-handler": "4.5.2",
18
- "@webiny/api-file-manager": "6.2.0",
19
- "@webiny/api-headless-cms": "6.2.0",
20
- "@webiny/aws-sdk": "6.2.0",
21
- "@webiny/error": "6.2.0",
22
- "@webiny/feature": "6.2.0",
23
- "@webiny/handler-graphql": "6.2.0",
24
- "@webiny/plugins": "6.2.0",
25
- "@webiny/project-utils": "6.2.0",
26
- "@webiny/tasks": "6.2.0",
27
- "@webiny/utils": "6.2.0",
17
+ "@smithy/node-http-handler": "4.5.3",
18
+ "@webiny/api-file-manager": "6.3.0-beta.1",
19
+ "@webiny/api-headless-cms": "6.3.0-beta.1",
20
+ "@webiny/aws-sdk": "6.3.0-beta.1",
21
+ "@webiny/error": "6.3.0-beta.1",
22
+ "@webiny/feature": "6.3.0-beta.1",
23
+ "@webiny/handler-graphql": "6.3.0-beta.1",
24
+ "@webiny/plugins": "6.3.0-beta.1",
25
+ "@webiny/project-utils": "6.3.0-beta.1",
26
+ "@webiny/tasks": "6.3.0-beta.1",
27
+ "@webiny/utils": "6.3.0-beta.1",
28
28
  "archiver": "7.0.1",
29
29
  "bytes": "3.1.2",
30
30
  "uniqid": "5.4.0",
@@ -35,22 +35,22 @@
35
35
  "@types/adm-zip": "0.5.8",
36
36
  "@types/archiver": "7.0.0",
37
37
  "@types/unzipper": "0.10.11",
38
- "@webiny/api": "6.2.0",
39
- "@webiny/api-core": "6.2.0",
40
- "@webiny/build-tools": "6.2.0",
41
- "@webiny/handler": "6.2.0",
42
- "@webiny/handler-aws": "6.2.0",
38
+ "@webiny/api": "6.3.0-beta.1",
39
+ "@webiny/api-core": "6.3.0-beta.1",
40
+ "@webiny/build-tools": "6.3.0-beta.1",
41
+ "@webiny/handler": "6.3.0-beta.1",
42
+ "@webiny/handler-aws": "6.3.0-beta.1",
43
43
  "@webiny/plugins": "0.0.0",
44
- "@webiny/wcp": "6.2.0",
44
+ "@webiny/wcp": "6.3.0-beta.1",
45
45
  "adm-zip": "0.5.17",
46
46
  "aws-sdk-client-mock": "4.1.0",
47
47
  "graphql": "16.13.2",
48
- "typescript": "5.9.3",
48
+ "typescript": "6.0.3",
49
49
  "vitest": "4.1.4"
50
50
  },
51
51
  "publishConfig": {
52
52
  "access": "public",
53
53
  "directory": "dist"
54
54
  },
55
- "gitHead": "3d3148358b6febbc857371930871743bec3b3939"
55
+ "gitHead": "664b273a9f0a971f9ca7e6ffe920db77fefdced1"
56
56
  }
@@ -1 +1 @@
1
- {"version":3,"names":["IMPORT_FROM_URL_DOWNLOAD_TASK","getBackOffSeconds","CmsImportExportFileType","IImportFromUrlControllerInputStep","getChildTasks","ImportFromUrlControllerDownloadStep","constructor","context","execute","params","input","controller","task","state","getTask","step","steps","DOWNLOAD","triggered","files","filter","file","type","ENTRIES","ASSETS","length","response","error","message","code","trigger","name","definition","modelId","output","continue","seconds","iterations","finished","failed","running","invalid","aborted","done","collection","map","item","data"],"sources":["ImportFromUrlControllerDownloadStep.ts"],"sourcesContent":["import type { ImportFromUrlControllerStep } from \"./abstractions/ImportFromUrlControllerStep.js\";\nimport type {\n IImportFromUrlDownloadInput,\n IImportFromUrlDownloadOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlDownload.js\";\nimport { IMPORT_FROM_URL_DOWNLOAD_TASK } from \"~/tasks/constants.js\";\nimport { getBackOffSeconds } from \"~/tasks/utils/helpers/getBackOffSeconds.js\";\nimport { CmsImportExportFileType, type Context } from \"~/types.js\";\nimport type {\n IImportFromUrlControllerInput,\n IImportFromUrlControllerOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlController.js\";\nimport { IImportFromUrlControllerInputStep } from \"~/tasks/domain/abstractions/ImportFromUrlController.js\";\nimport { getChildTasks } from \"./getChildTasks.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\nexport class ImportFromUrlControllerDownloadStep<\n I extends IImportFromUrlControllerInput = IImportFromUrlControllerInput,\n O extends IImportFromUrlControllerOutput = IImportFromUrlControllerOutput\n> implements ImportFromUrlControllerStep<I, O>\n{\n constructor(private context: Context) {}\n\n public async execute(\n params: TaskDefinition.RunParams<I, O>\n ): Promise<TaskDefinition.Result<I, O>> {\n const { input, controller } = params;\n\n const task = controller.state.getTask();\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 controller.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 controller.task.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 controller.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: this.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 controller.response.continue(input, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (collection.length === 0) {\n return controller.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 controller.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 controller.response.continue(output);\n }\n return controller.response.error({\n message: \"Impossible to get to this point. Fatal error.\"\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["IMPORT_FROM_URL_DOWNLOAD_TASK","getBackOffSeconds","CmsImportExportFileType","IImportFromUrlControllerInputStep","getChildTasks","ImportFromUrlControllerDownloadStep","constructor","context","execute","params","input","controller","task","state","getTask","step","steps","DOWNLOAD","triggered","files","filter","file","type","ENTRIES","ASSETS","length","response","error","message","code","trigger","name","definition","modelId","output","continue","seconds","iterations","finished","failed","running","invalid","aborted","done","collection","map","item","data"],"sources":["ImportFromUrlControllerDownloadStep.ts"],"sourcesContent":["import type { ImportFromUrlControllerStep } from \"./abstractions/ImportFromUrlControllerStep.js\";\nimport type {\n IImportFromUrlDownloadInput,\n IImportFromUrlDownloadOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlDownload.js\";\nimport { IMPORT_FROM_URL_DOWNLOAD_TASK } from \"~/tasks/constants.js\";\nimport { getBackOffSeconds } from \"~/tasks/utils/helpers/getBackOffSeconds.js\";\nimport { CmsImportExportFileType, type Context } from \"~/types.js\";\nimport type {\n IImportFromUrlControllerInput,\n IImportFromUrlControllerOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlController.js\";\nimport { IImportFromUrlControllerInputStep } from \"~/tasks/domain/abstractions/ImportFromUrlController.js\";\nimport { getChildTasks } from \"./getChildTasks.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\nexport class ImportFromUrlControllerDownloadStep<\n I extends IImportFromUrlControllerInput = IImportFromUrlControllerInput,\n O extends IImportFromUrlControllerOutput = IImportFromUrlControllerOutput\n> implements ImportFromUrlControllerStep<I, O> {\n constructor(private context: Context) {}\n\n public async execute(\n params: TaskDefinition.RunParams<I, O>\n ): Promise<TaskDefinition.Result<I, O>> {\n const { input, controller } = params;\n\n const task = controller.state.getTask();\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 controller.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 controller.task.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 controller.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: this.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 controller.response.continue(input, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (collection.length === 0) {\n return controller.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 controller.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 controller.response.continue(output);\n }\n return controller.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":["CmsImportExportFileType","IImportFromUrlControllerInputStep","prependImportPath","getBackOffSeconds","IMPORT_FROM_URL_PROCESS_ASSETS_TASK","getChildTasks","ImportFromUrlControllerProcessAssetsStep","constructor","context","execute","params","input","controller","task","state","getTask","step","steps","PROCESS_ASSETS","triggered","files","filter","file","type","ASSETS","length","output","error","message","code","aborted","done","failed","invalid","response","inputFiles","key","trigger","name","definition","maxInsertErrors","modelId","push","continue","seconds","iterations","finished","running","collection"],"sources":["ImportFromUrlControllerProcessAssetsStep.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { CmsImportExportFileType, type Context } from \"~/types.js\";\nimport type {\n IImportFromUrlControllerInput,\n IImportFromUrlControllerOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlController.js\";\nimport { IImportFromUrlControllerInputStep } from \"~/tasks/domain/abstractions/ImportFromUrlController.js\";\nimport type { ImportFromUrlControllerStep } from \"~/tasks/domain/importFromUrlControllerSteps/abstractions/ImportFromUrlControllerStep.js\";\nimport { prependImportPath } from \"~/tasks/utils/helpers/importPath.js\";\nimport { getBackOffSeconds } from \"~/tasks/utils/helpers/getBackOffSeconds.js\";\nimport { IMPORT_FROM_URL_PROCESS_ASSETS_TASK } from \"~/tasks/constants.js\";\nimport { getChildTasks } from \"~/tasks/domain/importFromUrlControllerSteps/getChildTasks.js\";\nimport type { IImportFromUrlProcessAssetsInput } from \"~/features/ImportFromUrlProcessAssetsTask/importFromUrlProcessAssets/abstractions/ImportFromUrlProcessAssets.js\";\n\nexport class ImportFromUrlControllerProcessAssetsStep<\n I extends IImportFromUrlControllerInput = IImportFromUrlControllerInput,\n O extends IImportFromUrlControllerOutput = IImportFromUrlControllerOutput\n> implements ImportFromUrlControllerStep<I, O>\n{\n constructor(private context: Context) {}\n\n public async execute(\n params: TaskDefinition.RunParams<I, O>\n ): Promise<TaskDefinition.Result<I, O>> {\n const { input, controller } = params;\n\n const task = controller.state.getTask();\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 controller.response.done(output as O);\n }\n const inputFiles: string[] = [];\n for (const file of files) {\n const key = prependImportPath(file.key);\n await controller.task.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 controller.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: this.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 controller.response.continue(input, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (collection.length === 0) {\n return controller.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 controller.response.continue(output);\n }\n return controller.response.error({\n message: \"Impossible to get to this point. Fatal error.\"\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["CmsImportExportFileType","IImportFromUrlControllerInputStep","prependImportPath","getBackOffSeconds","IMPORT_FROM_URL_PROCESS_ASSETS_TASK","getChildTasks","ImportFromUrlControllerProcessAssetsStep","constructor","context","execute","params","input","controller","task","state","getTask","step","steps","PROCESS_ASSETS","triggered","files","filter","file","type","ASSETS","length","output","error","message","code","aborted","done","failed","invalid","response","inputFiles","key","trigger","name","definition","maxInsertErrors","modelId","push","continue","seconds","iterations","finished","running","collection"],"sources":["ImportFromUrlControllerProcessAssetsStep.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { CmsImportExportFileType, type Context } from \"~/types.js\";\nimport type {\n IImportFromUrlControllerInput,\n IImportFromUrlControllerOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlController.js\";\nimport { IImportFromUrlControllerInputStep } from \"~/tasks/domain/abstractions/ImportFromUrlController.js\";\nimport type { ImportFromUrlControllerStep } from \"~/tasks/domain/importFromUrlControllerSteps/abstractions/ImportFromUrlControllerStep.js\";\nimport { prependImportPath } from \"~/tasks/utils/helpers/importPath.js\";\nimport { getBackOffSeconds } from \"~/tasks/utils/helpers/getBackOffSeconds.js\";\nimport { IMPORT_FROM_URL_PROCESS_ASSETS_TASK } from \"~/tasks/constants.js\";\nimport { getChildTasks } from \"~/tasks/domain/importFromUrlControllerSteps/getChildTasks.js\";\nimport type { IImportFromUrlProcessAssetsInput } from \"~/features/ImportFromUrlProcessAssetsTask/importFromUrlProcessAssets/abstractions/ImportFromUrlProcessAssets.js\";\n\nexport class ImportFromUrlControllerProcessAssetsStep<\n I extends IImportFromUrlControllerInput = IImportFromUrlControllerInput,\n O extends IImportFromUrlControllerOutput = IImportFromUrlControllerOutput\n> implements ImportFromUrlControllerStep<I, O> {\n constructor(private context: Context) {}\n\n public async execute(\n params: TaskDefinition.RunParams<I, O>\n ): Promise<TaskDefinition.Result<I, O>> {\n const { input, controller } = params;\n\n const task = controller.state.getTask();\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 controller.response.done(output as O);\n }\n const inputFiles: string[] = [];\n for (const file of files) {\n const key = prependImportPath(file.key);\n await controller.task.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 controller.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: this.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 controller.response.continue(input, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (collection.length === 0) {\n return controller.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 controller.response.continue(output);\n }\n return controller.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":["IMPORT_FROM_URL_PROCESS_ENTRIES_TASK","getBackOffSeconds","CmsImportExportFileType","IImportFromUrlControllerInputStep","getChildTasks","prependImportPath","ImportFromUrlControllerProcessEntriesStep","constructor","context","execute","params","input","controller","task","state","getTask","step","steps","PROCESS_ENTRIES","triggered","files","filter","file","type","ENTRIES","length","output","error","message","code","aborted","done","failed","invalid","response","inputFiles","key","trigger","name","definition","maxInsertErrors","modelId","push","continue","seconds","iterations","finished","running","collection"],"sources":["ImportFromUrlControllerProcessEntriesStep.ts"],"sourcesContent":["import type { ImportFromUrlControllerStep } from \"./abstractions/ImportFromUrlControllerStep.js\";\nimport { IMPORT_FROM_URL_PROCESS_ENTRIES_TASK } from \"~/tasks/constants.js\";\nimport { getBackOffSeconds } from \"~/tasks/utils/helpers/getBackOffSeconds.js\";\nimport { CmsImportExportFileType, type Context } from \"~/types.js\";\nimport type {\n IImportFromUrlControllerInput,\n IImportFromUrlControllerOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlController.js\";\nimport { IImportFromUrlControllerInputStep } from \"~/tasks/domain/abstractions/ImportFromUrlController.js\";\nimport { getChildTasks } from \"./getChildTasks.js\";\nimport { prependImportPath } from \"~/tasks/utils/helpers/importPath.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport type { IImportFromUrlProcessEntriesInput } from \"~/features/ImportFromUrlProcessEntriesTask/importFromUrlProcessEntries/abstractions/ImportFromUrlProcessEntries.js\";\n\nexport class ImportFromUrlControllerProcessEntriesStep<\n I extends IImportFromUrlControllerInput = IImportFromUrlControllerInput,\n O extends IImportFromUrlControllerOutput = IImportFromUrlControllerOutput\n> implements ImportFromUrlControllerStep<I, O>\n{\n constructor(private context: Context) {}\n\n public async execute(\n params: TaskDefinition.RunParams<I, O>\n ): Promise<TaskDefinition.Result<I, O>> {\n const { input, controller } = params;\n\n const task = controller.state.getTask();\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 controller.response.done(output as O);\n }\n const inputFiles: string[] = [];\n for (const file of files) {\n const key = prependImportPath(file.key);\n await controller.task.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 controller.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: this.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 controller.response.continue(input, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (collection.length === 0) {\n return controller.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 controller.response.continue(output);\n }\n return controller.response.error({\n message: \"Impossible to get to this point. Fatal error.\"\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["IMPORT_FROM_URL_PROCESS_ENTRIES_TASK","getBackOffSeconds","CmsImportExportFileType","IImportFromUrlControllerInputStep","getChildTasks","prependImportPath","ImportFromUrlControllerProcessEntriesStep","constructor","context","execute","params","input","controller","task","state","getTask","step","steps","PROCESS_ENTRIES","triggered","files","filter","file","type","ENTRIES","length","output","error","message","code","aborted","done","failed","invalid","response","inputFiles","key","trigger","name","definition","maxInsertErrors","modelId","push","continue","seconds","iterations","finished","running","collection"],"sources":["ImportFromUrlControllerProcessEntriesStep.ts"],"sourcesContent":["import type { ImportFromUrlControllerStep } from \"./abstractions/ImportFromUrlControllerStep.js\";\nimport { IMPORT_FROM_URL_PROCESS_ENTRIES_TASK } from \"~/tasks/constants.js\";\nimport { getBackOffSeconds } from \"~/tasks/utils/helpers/getBackOffSeconds.js\";\nimport { CmsImportExportFileType, type Context } from \"~/types.js\";\nimport type {\n IImportFromUrlControllerInput,\n IImportFromUrlControllerOutput\n} from \"~/tasks/domain/abstractions/ImportFromUrlController.js\";\nimport { IImportFromUrlControllerInputStep } from \"~/tasks/domain/abstractions/ImportFromUrlController.js\";\nimport { getChildTasks } from \"./getChildTasks.js\";\nimport { prependImportPath } from \"~/tasks/utils/helpers/importPath.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport type { IImportFromUrlProcessEntriesInput } from \"~/features/ImportFromUrlProcessEntriesTask/importFromUrlProcessEntries/abstractions/ImportFromUrlProcessEntries.js\";\n\nexport class ImportFromUrlControllerProcessEntriesStep<\n I extends IImportFromUrlControllerInput = IImportFromUrlControllerInput,\n O extends IImportFromUrlControllerOutput = IImportFromUrlControllerOutput\n> implements ImportFromUrlControllerStep<I, O> {\n constructor(private context: Context) {}\n\n public async execute(\n params: TaskDefinition.RunParams<I, O>\n ): Promise<TaskDefinition.Result<I, O>> {\n const { input, controller } = params;\n\n const task = controller.state.getTask();\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 controller.response.done(output as O);\n }\n const inputFiles: string[] = [];\n for (const file of files) {\n const key = prependImportPath(file.key);\n await controller.task.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 controller.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: this.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 controller.response.continue(input, {\n seconds: getBackOffSeconds(task.iterations)\n });\n } else if (collection.length === 0) {\n return controller.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 controller.response.continue(output);\n }\n return controller.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":["CmsAssetsZipperExecuteContinueWithoutResult","constructor","params","entryCursor","fileCursor"],"sources":["CmsAssetsZipperExecuteContinueWithoutResult.ts"],"sourcesContent":["import type { ICmsAssetsZipperExecuteContinueWithoutResult } from \"./abstractions/CmsAssetsZipperExecuteContinueWithoutResult.js\";\n\nexport class CmsAssetsZipperExecuteContinueWithoutResult\n implements ICmsAssetsZipperExecuteContinueWithoutResult\n{\n public readonly entryCursor: string | undefined;\n public readonly fileCursor: string | undefined;\n\n public constructor(params: ICmsAssetsZipperExecuteContinueWithoutResult) {\n this.entryCursor = params.entryCursor;\n this.fileCursor = params.fileCursor;\n }\n}\n"],"mappings":"AAEA,OAAO,MAAMA,2CAA2C,CAExD;EAIWC,WAAWA,CAACC,MAAoD,EAAE;IACrE,IAAI,CAACC,WAAW,GAAGD,MAAM,CAACC,WAAW;IACrC,IAAI,CAACC,UAAU,GAAGF,MAAM,CAACE,UAAU;EACvC;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["CmsAssetsZipperExecuteContinueWithoutResult","constructor","params","entryCursor","fileCursor"],"sources":["CmsAssetsZipperExecuteContinueWithoutResult.ts"],"sourcesContent":["import type { ICmsAssetsZipperExecuteContinueWithoutResult } from \"./abstractions/CmsAssetsZipperExecuteContinueWithoutResult.js\";\n\nexport class CmsAssetsZipperExecuteContinueWithoutResult implements ICmsAssetsZipperExecuteContinueWithoutResult {\n public readonly entryCursor: string | undefined;\n public readonly fileCursor: string | undefined;\n\n public constructor(params: ICmsAssetsZipperExecuteContinueWithoutResult) {\n this.entryCursor = params.entryCursor;\n this.fileCursor = params.fileCursor;\n }\n}\n"],"mappings":"AAEA,OAAO,MAAMA,2CAA2C,CAAyD;EAItGC,WAAWA,CAACC,MAAoD,EAAE;IACrE,IAAI,CAACC,WAAW,GAAGD,MAAM,CAACC,WAAW;IACrC,IAAI,CAACC,UAAU,GAAGF,MAAM,CAACE,UAAU;EACvC;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["CmsAssetsZipperExecuteDoneWithoutResult"],"sources":["CmsAssetsZipperExecuteDoneWithoutResult.ts"],"sourcesContent":["import type { ICmsAssetsZipperExecuteDoneWithoutResult } from \"./abstractions/CmsAssetsZipperExecuteDoneWithoutResult.js\";\n\nexport class CmsAssetsZipperExecuteDoneWithoutResult\n implements ICmsAssetsZipperExecuteDoneWithoutResult {\n /**\n * Just need an empty class\n */\n}\n"],"mappings":"AAEA,OAAO,MAAMA,uCAAuC,CACI;EACpD;AACJ;AACA;AAFI","ignoreList":[]}
1
+ {"version":3,"names":["CmsAssetsZipperExecuteDoneWithoutResult"],"sources":["CmsAssetsZipperExecuteDoneWithoutResult.ts"],"sourcesContent":["import type { ICmsAssetsZipperExecuteDoneWithoutResult } from \"./abstractions/CmsAssetsZipperExecuteDoneWithoutResult.js\";\n\nexport class CmsAssetsZipperExecuteDoneWithoutResult implements ICmsAssetsZipperExecuteDoneWithoutResult {\n /**\n * Just need an empty class\n */\n}\n"],"mappings":"AAEA,OAAO,MAAMA,uCAAuC,CAAqD;EACrG;AACJ;AACA;AAFI","ignoreList":[]}
@@ -8,6 +8,7 @@ const createResolvedAsset = file => {
8
8
  metadata: file.metadata,
9
9
  location: file.location,
10
10
  tags: file.tags,
11
+ description: file.description,
11
12
  extensions: file.extensions
12
13
  };
13
14
  };