UNPKG

@antv/narrative-text-schema

Version:

Json schema of narrative text visualization

117 lines 12.5 kB
"use strict"; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); var utils_1 = require("../utils"); /** * use structure and variables to generate narrative text spec */ function generateTextSpec(_a) { var structures = _a.structures, _b = _a.structureTemps, structureTemps = _b === void 0 ? [] : _b, _c = _a.variables, variables = _c === void 0 ? [] : _c; var variableMap = (0, utils_1.arr2map)(variables, 'variableId'); var structureTempMap = (0, utils_1.arr2map)(structureTemps, 'templateId'); var splitReg = /(&{.*?})/; var varReg = /&{(.*?)}/; // generate paragraphs by structure var paragraphs = []; structures.forEach(function (structure, structureIdx) { var template = structure.template; var _a = structure.displayType, displayType = _a === void 0 ? structureIdx === 0 ? 'paragraph' : 'phrase' : _a; // "System &{s1}, includes &{s2}." => ["System ", "&{s1}", ", includes ", "&{s2}", "."] var templateStrArr = template.split(splitReg).filter(function (str) { return str; }); templateStrArr.forEach(function (templateStr, structureTempIdx) { var _a; var templateId = (_a = varReg.exec(templateStr)) === null || _a === void 0 ? void 0 : _a[1]; if (structureTempIdx > 0) displayType = 'phrase'; if (templateId && structureTempMap[templateId]) { var structureTemp = structureTempMap[templateId]; var subTemplate = structureTemp.template, variableId = structureTemp.variableId, separator_1 = structureTemp.separator, _b = structureTemp.displayType, subDisplayType = _b === void 0 ? 'phrase' : _b; var variable = variableId && variableMap[variableId]; var sentences_1 = getSentences(subTemplate, variable === null || variable === void 0 ? void 0 : variable.dataValue, variable === null || variable === void 0 ? void 0 : variable.dataMetaMap); if (subDisplayType === 'paragraph') { paragraphs = __spreadArray(__spreadArray([], paragraphs, true), sentences_1.map(function (sentence, sentenceIdx) { var phrases = __spreadArray([], sentence, true); if (separator_1 && sentenceIdx < sentences_1.length - 1) { phrases.push({ type: 'text', value: separator_1 }); } return { type: 'normal', phrases: phrases, }; }), true); } else if (subDisplayType === 'phrase') { if (!paragraphs.length) paragraphs.push({ type: 'normal', phrases: [] }); var latestParagraph = paragraphs[paragraphs.length - 1]; latestParagraph.phrases = __spreadArray(__spreadArray([], latestParagraph.phrases, true), sentences_1.reduce(function (prev, curr, sentenceIdx) { var phrases = __spreadArray(__spreadArray([], prev, true), curr, true); if (separator_1 && sentenceIdx < sentences_1.length - 1) { phrases.push({ type: 'text', value: separator_1 }); } return phrases; }, []), true); } } else { var currPhrase = { type: 'text', value: templateStr }; if (displayType === 'paragraph') { paragraphs.push({ type: 'normal', phrases: [currPhrase] }); } else if (displayType === 'phrase') { if (!paragraphs.length) paragraphs.push({ type: 'normal', phrases: [] }); var latestParagraph = paragraphs[paragraphs.length - 1]; latestParagraph.phrases.push(currPhrase); } } }); }); return { // single section represent // 当前构造可以只通过一个 section 表示 sections: [{ paragraphs: paragraphs }], }; } function getSentences(template, dataValue, dataMetaMap) { var splitReg = /(\${.*?})/; var varReg = /\${(.*?)}/; var METRIC_NAME_SUFFIX = '[metric_name]'; // "user ${name}, age is ${age}" => ["user ", "${name}", ", age is ", "${age}"] var templateStrArr = template.split(splitReg).filter(function (str) { return str; }); // {} => [{}] var formattedDataValue = Array.isArray(dataValue) ? dataValue : [dataValue || {}]; return formattedDataValue.map(function (datum) { return templateStrArr.map(function (str) { var _a, _b; var varName = (_a = varReg.exec(str)) === null || _a === void 0 ? void 0 : _a[1]; // age if (varName) { if (varName.endsWith(METRIC_NAME_SUFFIX)) { var fieldId = varName.slice(0, -METRIC_NAME_SUFFIX.length); return { type: 'entity', value: ((_b = dataMetaMap === null || dataMetaMap === void 0 ? void 0 : dataMetaMap[fieldId]) === null || _b === void 0 ? void 0 : _b.name) || fieldId, metadata: { entityType: 'metric_name' }, }; } var data = (0, utils_1.isUndefined)(datum[varName]) ? '-' : "".concat(datum[varName]); var dataMeta = dataMetaMap === null || dataMetaMap === void 0 ? void 0 : dataMetaMap[varName]; if (dataMeta === null || dataMeta === void 0 ? void 0 : dataMeta.entityType) { return { type: 'entity', value: data, metadata: { entityType: dataMeta === null || dataMeta === void 0 ? void 0 : dataMeta.entityType } }; } return { type: 'text', value: data }; } return { type: 'text', value: str }; }); }); } exports.default = generateTextSpec; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVUZXh0U3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZS9nZW5lcmF0ZVRleHRTcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsa0NBQWdEO0FBSWhEOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxFQVF6QjtRQVBDLFVBQVUsZ0JBQUEsRUFDVixzQkFBbUIsRUFBbkIsY0FBYyxtQkFBRyxFQUFFLEtBQUEsRUFDbkIsaUJBQWMsRUFBZCxTQUFTLG1CQUFHLEVBQUUsS0FBQTtJQU1kLElBQU0sV0FBVyxHQUFHLElBQUEsZUFBTyxFQUFXLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMvRCxJQUFNLGdCQUFnQixHQUFHLElBQUEsZUFBTyxFQUFnQixjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDOUUsSUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzVCLElBQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQztJQUUxQixtQ0FBbUM7SUFDbkMsSUFBSSxVQUFVLEdBQW9CLEVBQUUsQ0FBQztJQUVyQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQUMsU0FBUyxFQUFFLFlBQVk7UUFDakMsSUFBQSxRQUFRLEdBQUssU0FBUyxTQUFkLENBQWU7UUFDekIsSUFBQSxLQUE4RCxTQUFTLFlBQWQsRUFBekQsV0FBVyxtQkFBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBQSxDQUFlO1FBQzlFLHVGQUF1RjtRQUN2RixJQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFDLEdBQUcsSUFBSyxPQUFBLEdBQUcsRUFBSCxDQUFHLENBQUMsQ0FBQztRQUVyRSxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQUMsV0FBVyxFQUFFLGdCQUFnQjs7WUFDbkQsSUFBTSxVQUFV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