const resolveUttAndPattRef = function()

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};
}