UNPKG

knowmax-quest-utils

Version:

Utilities for creating a Knowmax Quest client.

104 lines 5.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseMetadataValueListWithPairId = exports.parseMetadataValueWithPairId = exports.parseMetadataValueWithPostfix = exports.parseMetadataValueWithPrefix = exports.formatMetadataValueWithPostfix = exports.formatMetadataValueWithPrefix = exports.metadataValues = exports.metadataValue = exports.formatMetadataLabel = exports.parseMetadataLabel = exports.metadataMatch = void 0; /** Match given IMetadata value with given label specification. * @param metadata value to evaluate. * @param labelOrFamilyWithLabel Either string or array of strings which should be evaluated. Allowed formats: 'familylabel:label' and 'label'. In case of array, a match is considered if at least one value matches. * @param origin Optional origin to match. * @returns Boolean indicating match. */ const metadataMatch = (metadata, labelOrFamilyWithLabel, origin) => { const list = typeof labelOrFamilyWithLabel === 'string' ? [labelOrFamilyWithLabel] : labelOrFamilyWithLabel; return list.some((l) => { if (origin && metadata.origin !== origin) return false; const { family, label } = (0, exports.parseMetadataLabel)(l); return family ? metadata.familyLabel === family && metadata.label === label : metadata.label === label; }); }; exports.metadataMatch = metadataMatch; /** Parse optional family label and label from given label. * @param label Allowed format: 'familylabel:label' and 'label' * @returns Object containing optional familyLabel and label. */ const parseMetadataLabel = (label) => { const index = label.indexOf(':'); return { family: index > 1 ? label.substring(0, index) : undefined, label: index >= 0 && index < label.length ? label.substring(index + 1) : label }; }; exports.parseMetadataLabel = parseMetadataLabel; /** Combine family label and label. */ const formatMetadataLabel = (familyLabel, label) => `${familyLabel}:${label}`; exports.formatMetadataLabel = formatMetadataLabel; /** Get first value from metadata matching family label and label. Returns undefined in case value not found. */ const metadataValue = (familyLabel, label, list) => list?.find((m) => m.label === label && m.familyLabel === familyLabel)?.value; exports.metadataValue = metadataValue; /** Get array with all values matching family label and label. Returns empty array in case no values found. */ const metadataValues = (familyLabel, label, list) => list ? list.filter((m) => m.label === label && m.familyLabel === familyLabel).map((m) => m.value) : []; exports.metadataValues = metadataValues; /** Format given prefix value in given value by convention "[prefix]value". */ const formatMetadataValueWithPrefix = (value, prefix) => `[${prefix}]${value}`; exports.formatMetadataValueWithPrefix = formatMetadataValueWithPrefix; /** Format given postfix value in given value by convention "value[postfix]" */ const formatMetadataValueWithPostfix = (value, postfix) => `${value}[${postfix}]`; exports.formatMetadataValueWithPostfix = formatMetadataValueWithPostfix; /** Parses prefix by convention using [prefix] from metadata value. * @param value Metadata value to parse. Prefix formatted like [text] at beginning of value. * @returns Tuple containing value and optional prefix. */ const parseMetadataValueWithPrefix = (value) => { if (value.startsWith('[')) { const index = value.indexOf(']'); if (index > 0) { return [value.substring(index + 1), value.substring(1, index)]; } } return [value, undefined]; }; exports.parseMetadataValueWithPrefix = parseMetadataValueWithPrefix; /** Parses postfix by convention using [postfix] from metadata value. * @param value Metadata value to parse. Postfix formatted like [text] at end of value. * @returns Tuple containing value and optional postfix. */ const parseMetadataValueWithPostfix = (value) => { if (value.endsWith(']')) { const index = value.lastIndexOf('['); if (index > 0) { return [value.substring(0, index), value.substring(index + 1, value.length - 1)]; } } return [value, undefined]; }; exports.parseMetadataValueWithPostfix = parseMetadataValueWithPostfix; /** Parses pair id and value from metadata values with pair id. * @param value Metadata value to parse. Pair id formatted like [number] at beginning of value. * @returns Tuple containing value and optional numeric pair id. */ const parseMetadataValueWithPairId = (value) => { const [v, prefix] = (0, exports.parseMetadataValueWithPrefix)(value); if (prefix) { const id = parseInt(prefix); if (!isNaN(id)) { return [v, id]; } } return [value, undefined]; }; exports.parseMetadataValueWithPairId = parseMetadataValueWithPairId; /** Parses list of IMetadata with pair id specified into IMetadata type expaned with pairId. * @param data List of IMetadata to parse. * @returns List of IMetadata extended numeric with pair id. Values without or invalid pair id are filtered out. */ const parseMetadataValueListWithPairId = (data) => { return data .map((item) => { const [value, id] = (0, exports.parseMetadataValueWithPairId)(item.value); return { ...item, value: value, pairId: id }; }) .filter((item) => item.pairId !== undefined && !isNaN(item.pairId)) .map((item) => ({ ...item, pairId: item.pairId ?? -1 })); }; exports.parseMetadataValueListWithPairId = parseMetadataValueListWithPairId; //# sourceMappingURL=metadata.js.map