UNPKG

@goatlab/fluent

Version:

Readable query Interface & API generator for TS and Node

43 lines (42 loc) 1.86 kB
"use strict"; 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;