knowmax-quest-utils
Version:
Utilities for creating a Knowmax Quest client.
153 lines • 6.03 kB
JavaScript
/** Generates quest id from given IReferenceInfo.
* @param referenceInfo Describes document and version to generate quest id for.
* @param nodeQuestId Optional quest id of node to add to identification of document specified by referenceInfo.
* @param forceVersion Set to true to force version specification even if referenceInfo refers to current version.
* @returns QuestId or undefined in case referenceInfo contains no reference to an existing document and/or document version.
*/
/**export const generateQuestIdFromReference = (referenceInfo: IReferenceInfo, nodeQuestId?: string, forceVersion = false): string | undefined => {
return referenceInfo.document && referenceInfo.documentVersion ?
generateQuestId(referenceInfo.document.questId, referenceInfo.documentVersion.version, referenceInfo.documentVersion.current, nodeQuestId, forceVersion) : undefined;
}*/
export const generateQuestIdFromReference = (referenceInfo, nodeQuestId, forceVersion = false) => {
return referenceInfo.document && referenceInfo.documentVersion ?
generateQuestId(referenceInfo.document.questId, referenceInfo.documentVersion.version, referenceInfo.documentVersion.current, nodeQuestId, forceVersion) : undefined;
};
export const generateQuestId = (documentQuestId, version, current, nodeQuestId, forceVersion = false) => {
return `${documentQuestId}${nodeQuestId ? `/${nodeQuestId}` : ''}${generateQuestIdVersionPostfix(version, current ?? false, forceVersion)}`;
};
/** Generates version postfix, like [versionumber] or empty in case it's current version.
* @param version Quest version specification. Might be number, date or Quest specific version specification.
* @param current Boolean indicating if given version is to be known as current version.
* @param force Boolean indicating to force version specification output even if this was current document.
*/
export const generateQuestIdVersionPostfix = (version, current, force = false) => {
return !current || force ? `[${version}]` : '';
};
/** Get levels from given quest identification. For example: '1/1.1/1.1.1' => ['1', '1/1.1', '1/1.1/1.1.1']
* @param questId Quest identification to extract levels from.
*/
export const getLevels = (questId) => {
const levels = [];
let level = '';
questId.split('/').forEach((value) => {
level += level === '' ? value : `/${value}`;
levels.push(level);
});
return levels;
};
/** Return level above given quest identification. For example: '1/1.1/1.1.1' => '1/1.1'
* @param questId Quest identification.
*/
export const levelUp = (questId) => {
const index = questId.lastIndexOf('/');
if (index > 0) {
return questId.substring(0, index);
}
else {
return '';
}
};
/** Returns first level of questId.
* @param questId Quest identification.
*/
export const firstLevel = (questId) => {
const index = questId.indexOf('/');
if (index !== -1) {
return questId.substring(0, index);
}
else {
return undefined;
}
};
/** Returns last level of questId.
* @param questId Quest identification.
*/
export const lastLevel = (questId) => {
const index = questId.lastIndexOf('/');
if (index !== -1) {
if (index < questId.length - 1) {
return questId.substring(index + 1);
}
else {
return questId.substring(0, index);
}
}
else {
return questId;
}
};
/** Checks given QuestId for version specification.
* @param questId Quest identification.
*/
export const hasVersionSpecification = (questId) => {
return questId.indexOf('[') !== -1;
};
/** Return array with QuestId and optional version specification.
* @param questId Quest identification with optional version specification
*/
export const extractIdAndVersion = (questId) => {
const startindex = questId.indexOf('[');
if (startindex !== -1) {
const endindex = questId.indexOf(']', startindex);
if (endindex > startindex) {
const version = questId.substring(startindex + 1, endindex);
let qid = questId.substring(0, startindex);
if (endindex < questId.length) {
qid += questId.substring(endindex + 1);
}
return [qid, version.trim() === '' ? undefined : version];
}
}
return [questId, undefined];
};
/** Return QuestId without version specification.
* @param questId Quest identification with optional version specification to be stripped.
*/
export const extractId = (questId) => {
const startindex = questId.indexOf('[');
if (startindex !== -1) {
const endindex = questId.indexOf(']', startindex);
if (endindex > startindex) {
let qid = questId.substring(0, startindex);
if (endindex < questId.length) {
qid += questId.substring(endindex + 1);
}
return qid;
}
}
return questId;
};
/** Return version specification from QuestId.
* @param questId Quest identification with optional version specification to be extracted.
*/
export const extractVersion = (questId) => {
const startindex = questId.indexOf('[');
if (startindex !== -1) {
const endindex = questId.indexOf(']', startindex);
if (endindex > startindex) {
const version = questId.substring(startindex + 1, endindex);
return version.trim() === '' ? undefined : version;
}
}
return undefined;
};
/** Get numeric representation of given version.
* @param version Either numeric or string representation of version. Version specifications like last/first are ignored.
*/
export const numericVersion = (version) => {
if (typeof version === 'number') {
return version;
}
if (version) {
try {
const v = parseInt(version);
if (!isNaN(v)) {
return v;
}
}
catch (e) {
}
}
return undefined;
};
//# sourceMappingURL=questid.js.map