moysklad-helpers
Version:
Вспомогательные функции для работы с библиотекой moysklad
66 lines (65 loc) • 2.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getRefMetaType = void 0;
function getRefMetaType(anyRef) {
var _a;
if ((_a = anyRef === null || anyRef === void 0 ? void 0 : anyRef.meta) === null || _a === void 0 ? void 0 : _a.href) {
return getRefMetaType(anyRef.meta.href);
}
if (anyRef.substr(0, 8) === 'https://') {
const parts = anyRef.substr(8).split('/');
if (parts[1] === 'api' && parts[2] === 'remap') {
return getRefMetaType(parts.slice(4).join('/'));
}
else {
throw new Error(`Некорректный href - ${anyRef}`);
}
}
// FIXME Прописать все варианты возможны баги!!!
// TODO Возможно тут нужно сравнивать не под подстроке а по массиву (path)
switch (true) {
case anyRef.indexOf('entity/customentity') === 0:
return 'customentity';
case anyRef.indexOf('metadata/attributes') !== -1:
return 'attributemetadata';
case anyRef.indexOf('metadata/states') !== -1:
return 'state';
case anyRef.indexOf('context/companysettings/metadata/customEntities') ===
0:
return 'customentitymetadata';
case anyRef.indexOf('context/companysettings/pricetype') === 0:
return 'pricetype';
default:
const parts = anyRef.split('/');
// entity/{type}/..
if (parts[0] === 'entity' && parts[1]) {
// entity/{type}/{id}/{sub}
if (parts[3]) {
const subEntity = parts[3];
// entity/{type}/{id}/positions
if (subEntity === 'positions') {
// FIXME invoiceposition, ..
return `${parts[1]}position`;
}
// entity/{type}/{id}/accounts
else if (subEntity === 'accounts') {
return 'account';
}
// entity/{type}/{id}/???
else {
throw new Error(`getRefMetaType: Неизвестный тип вложенной сущности - ${subEntity}`);
}
}
// entity/{type}/{id}
else {
return parts[1];
}
}
// audit/{id}
if (parts[0] === 'audit' && parts[1]) {
return 'audit';
}
throw new Error('Неизвестный тип сокращенного href - ' + anyRef);
}
}
exports.getRefMetaType = getRefMetaType;