UNPKG

@commercelayer/sdk-utils

Version:
146 lines (143 loc) 5.6 kB
'use strict'; var chunkWSJGLDZH_cjs = require('./chunk-WSJGLDZH.cjs'); var chunk6QM3G7UZ_cjs = require('./chunk-6QM3G7UZ.cjs'); var chunkOGEPN5MT_cjs = require('./chunk-OGEPN5MT.cjs'); var chunkMLE76YHX_cjs = require('./chunk-MLE76YHX.cjs'); // src/jobs.ts var splitInputJob = (job, jobType, options) => { const jobs = []; if (!job?.inputs || job.inputs.length === 0) return jobs; const groupId = options?.noGroupId ? void 0 : chunk6QM3G7UZ_cjs.groupUID(); const jobSize = options?.size; const jobMaxSize = jobSize ? Math.min(Math.max(1, jobSize), chunkOGEPN5MT_cjs.config[jobType].max_size) : chunkOGEPN5MT_cjs.config[jobType].max_size; const allInputs = job.inputs; const totJobs = Math.ceil(allInputs.length / jobMaxSize); let jobNum = 0; while (allInputs.length > 0) { jobNum++; const jobCreate = { ...job, inputs: allInputs.splice(0, jobMaxSize), metadata: { ...job.metadata } }; if (groupId) jobCreate.reference = `${groupId}-${jobNum}`; if (!options?.noMetadata) { if (!jobCreate.metadata) jobCreate.metadata = {}; jobCreate.metadata.progress_number = `${jobNum}/${totJobs}`; if (groupId) jobCreate.metadata.group_id = groupId; } jobs.push(jobCreate); } return jobs; }; var splitOutputJob = async (job, jobType, options) => { const cl = chunkMLE76YHX_cjs.init_default().sdk; const rrr = cl.addRawResponseReader({ headers: true }); const resSdk = chunkMLE76YHX_cjs.init_default().api(job.resource_type); const jobSize = options?.size; const jobMaxSize = jobSize ? Math.min(Math.max(1, jobSize), chunkOGEPN5MT_cjs.config[jobType].max_size) : chunkOGEPN5MT_cjs.config[jobType].max_size; let delay = options?.delay; const totRecords = await resSdk.count({ filters: job.filters, pageSize: 1, pageNumber: 1 }); if (!delay) { const rateLimits = chunkWSJGLDZH_cjs.headerRateLimits(rrr.headers); const rateLimit = chunkWSJGLDZH_cjs.computeRateLimits(rateLimits, jobType); delay = rateLimit.delay; } cl.removeRawResponseReader(); const totJobs = Math.ceil(totRecords / jobMaxSize); const jobs = []; const groupId = options?.noGroupId ? void 0 : chunk6QM3G7UZ_cjs.groupUID(); let startId = null; let stopId = null; let jobPage = 0; for (let curJob = 0; curJob < totJobs; curJob++) { const jobNum = curJob + 1; const jobCreate = { ...job, filters: { ...job.filters }, metadata: { ...job.metadata } }; if (groupId) jobCreate.reference = `${groupId}-${jobNum}`; if (!jobCreate.filters) jobCreate.filters = {}; if (!options?.noMetadata) { if (!jobCreate.metadata) jobCreate.metadata = {}; jobCreate.metadata.progress_number = `${jobNum}/${totJobs}`; if (groupId) jobCreate.metadata.group_id = groupId; } const pageSize = 1; const curJobRecords = Math.min(jobMaxSize, totRecords - jobMaxSize * curJob); const curJobPages = Math.ceil(curJobRecords / pageSize); jobPage += curJobPages; await chunk6QM3G7UZ_cjs.sleep(delay); const curJobLastPage = await resSdk.list({ filters: job.filters, pageSize, pageNumber: jobPage, sort: { id: "asc" } }); stopId = curJobLastPage.last()?.id; if (startId) jobCreate.filters.id_gt = startId; if (jobNum < totJobs) jobCreate.filters.id_lteq = stopId; jobs.push(jobCreate); startId = stopId; } return jobs; }; var jobsToBatchTasks = (jobs, jobType, baseTask) => { return jobs.map((job) => { const task = { operation: "create", resourceType: jobType, resource: { ...job } }; if (baseTask) { task.onFailure = baseTask.onFailure; task.onSuccess = baseTask.onSuccess; task.params = baseTask.params; task.options = baseTask.options; } return task; }); }; var isRunning = (job) => { return !job.status || ["pending", "in_progress"].includes(job.status); }; var countRunning = (jobs) => { return jobs.filter((j) => isRunning(j)).length; }; var isCompleted = (job) => { return ["completed", "interrupted"].includes(job.status); }; var countCompleted = (jobs) => { return jobs.filter((j) => isCompleted(j)).length; }; var executeJobs = async (jobs, jobType, options) => { const checkInterval = 1e3; const cl = chunkMLE76YHX_cjs.init_default().sdk; const rrr = cl.addRawResponseReader({ headers: true }); const resSdk = chunkMLE76YHX_cjs.init_default().api(jobType); const results = []; const queueMax = options?.queueLength || chunkOGEPN5MT_cjs.config[jobType].queue_size || jobs.length; let delay = -1; do { while (countRunning(results) < queueMax && results.length < jobs.length) { const job = await resSdk.create(jobs[results.length]); results.push(job); if (delay < 0) { const rateLimits = chunkWSJGLDZH_cjs.headerRateLimits(rrr.headers); const rateLimit = chunkWSJGLDZH_cjs.computeRateLimits(rateLimits, jobType); delay = rateLimit.delay; cl.removeRawResponseReader(); } else await chunk6QM3G7UZ_cjs.sleep(delay); } for (const job of results) { if (isCompleted(job)) continue; await chunk6QM3G7UZ_cjs.sleep(delay); const j = await resSdk.retrieve(job); Object.assign(job, j); } await chunk6QM3G7UZ_cjs.sleep(checkInterval); } while (countCompleted(results) < jobs.length); return results; }; exports.executeJobs = executeJobs; exports.jobsToBatchTasks = jobsToBatchTasks; exports.splitInputJob = splitInputJob; exports.splitOutputJob = splitOutputJob; //# sourceMappingURL=chunk-6SETOGPD.cjs.map //# sourceMappingURL=chunk-6SETOGPD.cjs.map