UNPKG

clwoz-models

Version:
244 lines 10.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ModelUtils_1 = require("./ModelUtils"); exports.filledEntityValueAsString = function (fe) { return exports.memoryValuesAsString(fe.values); }; exports.memoryValuesAsString = function (memories) { // Print out list in friendly manner var group = ''; for (var key in memories) { var index = +key; var prefix = ''; if (memories.length !== 1 && index === memories.length - 1) { prefix = ' and '; } else if (index !== 0) { prefix = ', '; } var value = memories[key]; var text = value.displayText ? value.displayText : value.userText; group += "" + prefix + text; } return group; }; // In future will refactor to remove FilledEntityMap, but this method provides abstraction // or isolation to methods that would normally consume filledEntityMap to reduce coupling // and make code more flexible exports.getEntityDisplayValueMap = function (filledEntityMap) { return Object.keys(filledEntityMap.map).reduce(function (m, key) { var entityDisplayValue = filledEntityMap.ValueAsString(key); if (entityDisplayValue) { m.set(key, entityDisplayValue); } // Entity is missing. Provide readable error message else { // Default to showing key var missingValue = key; // If key is an entityId, try to get value from name key if (filledEntityMap.map[key].entityId === key) { for (var _i = 0, _a = Object.keys(filledEntityMap.map); _i < _a.length; _i++) { var k = _a[_i]; if (k !== key && filledEntityMap.map[k].entityId === key) { missingValue = k; } } } m.set(key, "[$" + missingValue + "]"); } return m; }, new Map()); }; var FilledEntityMap = /** @class */ (function () { function FilledEntityMap(init) { this.map = {}; Object.assign(this, init); } FilledEntityMap.FromFilledEntities = function (filledEntities, entities) { var filledEntityMap = new FilledEntityMap(); var _loop_1 = function (filledEntity) { var entity = entities.find(function (e) { return e.entityId === filledEntity.entityId; }); if (entity) { filledEntityMap.map[entity.entityName] = filledEntity; } }; for (var _i = 0, filledEntities_1 = filledEntities; _i < filledEntities_1.length; _i++) { var filledEntity = filledEntities_1[_i]; _loop_1(filledEntity); } return filledEntityMap; }; // Flips entity name based map to entityId based map FilledEntityMap.prototype.EntityMapToIdMap = function () { var filledEntityMap = new FilledEntityMap(); for (var entityName in this.map) { var filledEntity = this.map[entityName]; filledEntityMap.map[filledEntity.entityId] = filledEntity; } return filledEntityMap; }; // Provided an update (diff), update the filled entity list FilledEntityMap.prototype.UpdateFilledEntities = function (filledEntities, entities) { var _loop_2 = function (filledEntity) { var entity = entities.find(function (e) { return e.entityId === filledEntity.entityId; }); if (entity) { this_1.map[entity.entityName] = filledEntity; } }; var this_1 = this; for (var _i = 0, filledEntities_2 = filledEntities; _i < filledEntities_2.length; _i++) { var filledEntity = filledEntities_2[_i]; _loop_2(filledEntity); } }; FilledEntityMap.prototype.ToMemory = function () { var memory = []; for (var entityName in this.map) { var entityValues = this.map[entityName] ? this.map[entityName].values : []; memory.push({ entityName: entityName, entityValues: entityValues }); } return memory; }; FilledEntityMap.prototype.ValueAsList = function (entityName) { if (!this.map[entityName]) { return []; } return this.map[entityName].values.filter(function (v) { return typeof v.userText === 'string'; }).map(function (v) { return v.userText; }); }; FilledEntityMap.prototype.ValueAsString = function (entityName) { if (!this.map[entityName]) { return null; } if (this.map[entityName].values.length === 0) { return null; } // Print out[] list in friendly manner return exports.filledEntityValueAsString(this.map[entityName]); }; FilledEntityMap.prototype.ValueAsNumber = function (entityName) { var textObj = this.ValueAsString(entityName); var number = Number(textObj); if (isNaN(number)) { return null; } return number; }; FilledEntityMap.prototype.ValueAsBoolean = function (entityName) { var textObj = this.ValueAsString(entityName); if (textObj) { if (textObj.toLowerCase() === 'true') { return true; } if (textObj.toLowerCase() === 'false') { return false; } } return null; }; FilledEntityMap.prototype.ValueAsObject = function (entityName) { var textObj = this.ValueAsString(entityName); if (textObj) { return JSON.parse(textObj); } return null; }; FilledEntityMap.prototype.Values = function (entityName) { if (!this.map[entityName]) { return []; } return this.map[entityName].values; }; FilledEntityMap.prototype.Forget = function (entityName, entityValue, isBucket) { if (entityValue === void 0) { entityValue = null; } if (isBucket === void 0) { isBucket = false; } // Check if entity buckets values if (isBucket) { // Entity might not be in memory if (!this.map[entityName]) { return; } // If no entity Value provide, clear the entity if (!entityValue) { delete this.map[entityName]; } else { // Find case insensitive index var lowerCaseNames = this.map[entityName].values.filter(function (mv) { return mv.userText; }).map(function (mv) { return mv.userText.toLowerCase(); }); var index = lowerCaseNames.indexOf(entityValue.toLowerCase()); if (index > -1) { this.map[entityName].values.splice(index, 1); if (this.map[entityName].values.length === 0) { delete this.map[entityName]; } } } } else { delete this.map[entityName]; } }; // Remember multiple values for an entity FilledEntityMap.prototype.RememberMany = function (entityName, entityId, entityValues, isBucket, builtinType, resolution) { if (isBucket === void 0) { isBucket = false; } if (builtinType === void 0) { builtinType = null; } if (resolution === void 0) { resolution = null; } // Filter out empty strings var values = entityValues.filter(function (s) { return s !== ""; }); // If no non-empty values, acts as delete if (values.length === 0) { this.Forget(entityName); return; } for (var _i = 0, values_1 = values; _i < values_1.length; _i++) { var entityValue = values_1[_i]; this.Remember(entityName, entityId, entityValue, isBucket, builtinType, resolution); } }; // Remember value for an entity FilledEntityMap.prototype.Remember = function (entityName, entityId, entityValue, isBucket, builtinType, resolution, enumValueId) { if (isBucket === void 0) { isBucket = false; } if (builtinType === void 0) { builtinType = null; } if (resolution === void 0) { resolution = null; } if (enumValueId === void 0) { enumValueId = undefined; } // If setting to an empty string is actually a delete if (entityValue === "") { this.Forget(entityName); return; } // If we don't already have entry in map for this item, create one if (!this.map[entityName]) { this.map[entityName] = { entityId: entityId, values: [] }; } var displayText = builtinType && resolution ? ModelUtils_1.ModelUtils.PrebuiltDisplayText(builtinType, resolution, entityValue) : entityValue; var newFilledEntityValue = { userText: entityValue, displayText: displayText, builtinType: builtinType, resolution: resolution, enumValueId: enumValueId }; var filledEntity = this.map[entityName]; // Check if entity buckets values if (isBucket) { // Add if not a duplicate var containsDuplicateValue = filledEntity.values.some(function (memoryValue) { return memoryValue.userText === entityValue; }); if (!containsDuplicateValue) { filledEntity.values.push(newFilledEntityValue); } } else { filledEntity.values = [newFilledEntityValue]; } }; /** Return FilledEntity array for items I've remembered */ FilledEntityMap.prototype.FilledEntities = function () { return Object.values(this.map); }; FilledEntityMap.Split = function (action) { return action.split(/[\s,:.?!\[\]]+/); }; return FilledEntityMap; }()); exports.FilledEntityMap = FilledEntityMap; //# sourceMappingURL=FilledEntity.js.map