@commercelayer/sdk-utils
Version:
Commerce Layer Javascript SDK Utils library
146 lines (143 loc) • 5.6 kB
JavaScript
;
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