UNPKG

calamarcopollo

Version:
85 lines (72 loc) 2.93 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractEntities = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _fuse = require('fuse.js'); var _fuse2 = _interopRequireDefault(_fuse); var _calamars = require('calamars'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const { getEntity, getEntities, getEntityMeta } = _calamars.WitDriver; const SLUG_LIST_PATH = process.env.SLUG_LIST_PATH; const slugList = SLUG_LIST_PATH ? require(SLUG_LIST_PATH) : []; const fuse = new _fuse2.default(slugList, { keys: ['name', 'alias'], threshold: 0.2 }); const addLocalMetadata = place => { if (!place || !place.value || place.metadata) { return place; } const needle = place.value; const searchResult = fuse.search(needle); if (searchResult.length) { console.log('\nLocal metadata found.'); const newPlace = _extends({}, place, { metadata: `{"slugs": ["${ searchResult[0].slug }"]}`, value: searchResult[0].name }); return newPlace; } return place; }; const addLocalMetadatas = arr => { try { return arr.map(addLocalMetadata); } catch (e) { return arr; } }; const extractEntities = outcomes => { const unknownPlaces = addLocalMetadatas(getEntities(outcomes, 'places')); const unknownPlace = unknownPlaces && unknownPlaces.length ? unknownPlaces[0] : null; const origins = addLocalMetadatas(getEntities(outcomes, 'origin')); const origin = origins && origins.length ? origins[0] : null; const destination = addLocalMetadata(getEntity(outcomes, 'destination')); const originMeta = getEntityMeta(origin); const destinationMeta = getEntityMeta(destination); const dateTime = getEntity(outcomes, 'datetime'); const timeFilter = dateTime ? { from: !dateTime.from ? dateTime : dateTime.from, to: dateTime.to ? dateTime.to : null } : null; const filters = getEntities(outcomes, 'filter'); const busTypeFilters = filters ? filters.filter(entity => entity.value === 'leito' || entity.value === 'semi-leito' || entity.value === 'convencional') : null; const priceFilter = filters ? filters.find(entity => entity.value === 'maiorPreco' || entity.value === 'menorPreco') || null : null; const result = { unknownPlace, unknownPlaces, origin, origins, originMeta, destination, destinationMeta, timeFilter, busTypeFilters, priceFilter }; // console.log('result', result); return result; }; exports.extractEntities = extractEntities;