@goatlab/fluent
Version:
Readable query Interface & API generator for TS and Node
43 lines (42 loc) • 1.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractMetadataFromKeys = void 0;
const extractMetadataFromKeys = (keys) => {
const keyToNestedKeyMap = {};
for (const key of keys) {
const preAttributeIndex = key.lastIndexOf('_');
const fullTableAlias = key.slice(0, preAttributeIndex).replace('_', '');
const keyName = key.slice(preAttributeIndex + 1, key.length);
const flattened = fullTableAlias
.replace(/___XXManyToOneXX/g, '')
.replace(/___XXOneToManyXX/g, '')
.replace(/___/g, '.')
.replace('__', '.')
.replace('.XXOneToManyXX', '');
const possibleCurrentTableKey = key.lastIndexOf('___');
const relation = possibleCurrentTableKey <= 0
? undefined
: key.slice(possibleCurrentTableKey + 3, preAttributeIndex);
const possibleParentTableKeyInit = key.lastIndexOf('___XX');
const possibleParentTableKeyEnd = key.lastIndexOf('XX__');
const cardinality = key.slice(possibleParentTableKeyInit, possibleParentTableKeyEnd) ||
undefined;
const parentRelationKey = key
.substring(0, possibleParentTableKeyInit)
.lastIndexOf('___');
const parentRelation = key
.substring(parentRelationKey, possibleParentTableKeyInit)
.replace(/___/g, '') || undefined;
var level = (key.match(/XX___/g) || []).length;
keyToNestedKeyMap[key] = {
keyName,
nestableKey: `${flattened}.${keyName}`,
relation,
parentRelation,
level,
cardinality: cardinality && cardinality.replace(/XX/g, '').replace(/___/g, '')
};
}
return keyToNestedKeyMap;
};
exports.extractMetadataFromKeys = extractMetadataFromKeys;