in parsers/LU/JS/packages/lu/src/parser/lu/luMerger.js [298:359]
const resolveUttAndPattRef = function(srcId, ref, refTree) {
let utterances = [];
let patterns = [];
let srcFile = refTree[srcId][ref.type].srcFile;
let newId = path.resolve(path.dirname(srcFile ? srcFile : ''), ref.parsedLink.fileName)
let tgtId = (refTree[ref.parsedLink.fileName] && refTree[ref.parsedLink.fileName].luis !== undefined) ? ref.parsedLink.fileName : undefined;
tgtId = (tgtId === undefined && refTree[newId] !== undefined && refTree[newId].luis !== undefined) ? newId : tgtId;
let tgtObj = refTree[ref.parsedLink.fileName] || refTree[newId] || undefined;
if (!tgtObj) {
let error = BuildDiagnostic({
message: `Unable to parse ${ref.text} in file: ${srcFile}. Cannot find reference.`
});
throw (new exception(retCode.errorCode.INVALID_INPUT, error.toString()));
}
// Resolve additional references if any in tgt obj
if ((tgtObj.luis && tgtObj.luis.refs.length !==0) || (tgtObj.qna && tgtObj.qna.refs.length !==0)) resolveRefs(refTree, tgtId)
let parseLCasePath = ref.parsedLink.path.toLowerCase();
let luisObj = tgtObj.luis.obj;
let referenceIntent = undefined;
if (parseLCasePath.endsWith('*utterancesandpatterns*')) {
// get utterance list from reference intent and update list
referenceIntent = parseLCasePath.replace(/-/g, ' ').replace('*utterancesandpatterns*', '').trim();
} else if (parseLCasePath.endsWith('*utterances*')) {
// get utterance list from reference intent and update list
referenceIntent = parseLCasePath.replace(/-/g, ' ').replace('*utterances*', '').trim();
patterns = undefined;
} else if (parseLCasePath.endsWith('*patterns*')) {
// get utterance list from reference intent and update list
referenceIntent = parseLCasePath.replace(/-/g, ' ').replace('*patterns*', '').trim();
utterances = undefined;
} else if (parseLCasePath.endsWith('*')) {
referenceIntent = undefined;
} else {
// get utterance list from reference intent and update list
referenceIntent = parseLCasePath.replace(/-/g, ' ').trim();
}
if (utterances !== undefined) {
luisObj.utterances.forEach(item => {
if (referenceIntent !== undefined && referenceIntent !== "") {
if (item.intent.toLowerCase() === referenceIntent.toLowerCase()) {
utterances.push(item.text)
}
} else {
utterances.push(item.text)
}
})
}
if (patterns !== undefined) {
luisObj.patterns.forEach(patt => {
if (referenceIntent !== undefined && referenceIntent !== "") {
if (patt.intent.toLowerCase() === referenceIntent.toLowerCase()) {
patterns.push(patt.pattern)
}
} else {
patterns.push(patt.pattern)
}
})
}
return {utterances, patterns};
}