Source: engine/universal/capabilities/parser/listParser/createConsolidatedList.js

const jsonld = require('jsonld');

/**
 * @module listParser
 * @memberof module:@proceed/capabilities.module:parser
 */

/**
 * @module createConsolidatedList
 * @memberof module:@proceed/capabilities.module:parser.module:listParser
 */

/**
  A Function that creates the consolidated list by using a jsonld library
  @param {list} capabilityList
  @returns {object} compacted and consolidated list for the capabilities
  endpoint
  note: of the predicate (type of the semantic description is without an URI (eg: 'rotation',
  the library parses it with '/'s eg: '/rotation')
*/
async function createConsolidatedList(capabilityList) {
  if (capabilityList.length === 0) {
    return 'There is no capability list for this engine!';
  }
  const context = capabilityList[0].semanticDescription['@context'];
  const doc = capabilityList
    .map((capabilityItem) => capabilityItem.semanticDescription['@graph'])
    .reduce((a, b) => a.concat(b));
  const compacted = await jsonld.compact(doc, context);
  const consolidatedGraph = compacted['@graph']
    .filter(
      (graphItem) =>
        !(typeof graphItem['@type'] === 'string' && graphItem['@type'].includes('Mapping'))
    )
    .filter((graphItem) => !graphItem['@id'].includes('Implementation'));
  const consolidatedList = await jsonld.compact(consolidatedGraph, context);
  return consolidatedList;
}

module.exports = createConsolidatedList;