ui/app/utils/parse-externalid.js

51 lines
1.3 KiB
JavaScript

import C from 'ui/utils/constants';
// Parses externalIds on services into
// {
// kind: what kind of id this is supposed to be
// group: for catalog, what group it's in
// id: the actual external id
export function parseExternalId(externalId) {
var out = {
kind: null,
group: null,
id: null,
};
if (!externalId) {
return out;
}
var idx = externalId.indexOf(C.EXTERNAL_ID.KIND_SEPARATOR);
if (idx >= 0) {
// New style kind://[group:]id
out.kind = externalId.substr(0, idx);
var rest = externalId.substr(idx + C.EXTERNAL_ID.KIND_SEPARATOR.length);
idx = rest.indexOf(C.EXTERNAL_ID.GROUP_SEPARATOR);
out.id = rest;
if (idx >= 0) {
// With group kind://group/id
out.group = rest.substr(0, idx);
} else {
// Without group kind://id
if (out.kind === C.EXTERNAL_ID.KIND_CATALOG) {
// For catalog kinds, we have a default group
out.group = C.EXTERNAL_ID.CATALOG_DEFAULT_GROUP;
}
}
} else {
var dashedIdx = externalId.lastIndexOf('-');
// Old style just an ID
out.kind = C.EXTERNAL_ID.KIND_CATALOG;
// defaultgroup:extid:version
out.id = `${C.EXTERNAL_ID.CATALOG_DEFAULT_GROUP}:${externalId.substr(0, dashedIdx)}:${externalId.substr(dashedIdx + 1)}`;
out.group = C.EXTERNAL_ID.CATALOG_DEFAULT_GROUP;
}
return out;
}