@unchainedshop/plugins
Version:
Official plugin collection for the Unchained Engine with payment, delivery, and pricing adapters
65 lines (64 loc) • 2.37 kB
JavaScript
import { WorkerDirector, WorkerAdapter } from '@unchainedshop/core';
import { createLogger } from '@unchainedshop/logger';
const isSupportedLocale = (locale) => {
try {
const dtf = new Intl.DateTimeFormat(locale);
const resolved = dtf.resolvedOptions().locale;
return resolved.toLowerCase() === locale.toLowerCase();
}
catch (e) {
console.error(e);
return false;
}
};
const createLanguageDialectList = (languages, countries) => {
const result = new Set();
(languages || []).forEach(({ isoCode: baseIsoCode }) => {
result.add(baseIsoCode);
(countries || []).forEach(({ isoCode: countryIsoCode }) => {
const dialectIsoCode = [baseIsoCode, countryIsoCode.toUpperCase()].join('-');
if (isSupportedLocale(dialectIsoCode))
result.add(dialectIsoCode);
});
});
return Array.from(result);
};
const logger = createLogger('unchained:bulk-export');
export const BulkExportWorker = {
...WorkerAdapter,
key: 'shop.unchained.worker-plugin.bulk-export',
label: 'Bulk Export',
version: '2.1.0',
type: 'BULK_EXPORT',
maxParallelAllocations: 1,
doWork: async (payload, unchainedAPI) => {
try {
const { modules } = unchainedAPI;
const languages = await modules.languages.findLanguages({ includeInactive: false });
const countries = await modules.countries.findCountries({ includeInactive: false });
const bulkExporter = unchainedAPI.bulkExporter.createBulkExporter({ entity: payload.type });
await bulkExporter.validate(payload);
const locales = createLanguageDialectList(languages, countries);
const [result, error] = await bulkExporter.execute(payload, locales, unchainedAPI);
if (error) {
return {
success: false,
result: result,
error,
};
}
return {
success: true,
result,
};
}
catch (err) {
logger.error(err);
return {
success: false,
error: { name: err.name, message: err.message, stack: err.stack },
};
}
},
};
WorkerDirector.registerAdapter(BulkExportWorker);