calamarcopollo
Version:
Save the chicken foundation
85 lines (72 loc) • 2.93 kB
JavaScript
;
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;