Skip to content
This repository was archived by the owner on Jan 15, 2025. It is now read-only.

Commit 2b00408

Browse files
authored
[bf-lu] Fix throwing exception bug in validateResponse when utterance reference is invalid (#1079)
* support output to file for kb:export command * fix exception issue in validateResponse * fix named groups not supported in composer
1 parent e06f70f commit 2b00408

File tree

3 files changed

+34
-9
lines changed

3 files changed

+34
-9
lines changed

packages/lu/src/parser/lufile/parseFileContents.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,6 @@ const parseFileContentsModule = {
128128
// parse entity section
129129
parseAndHandleEntitySection(parsedContent, resource, false, undefined, config);
130130

131-
// parse entity section
132-
parseAndHandleEntitySection(parsedContent, resource, false, undefined, config);
133-
134131
// validate simple intent section
135132
parseAndHandleSimpleIntentSection(parsedContent, resource, config)
136133

@@ -139,11 +136,11 @@ const parseFileContentsModule = {
139136
}
140137

141138
} catch(e) {
142-
if (e instanceof exception) {
139+
if (e instanceof exception && e.diagnostics) {
143140
errors.push(...e.diagnostics)
144141
} else {
145142
errors.push(BuildDiagnostic({
146-
message: e.message
143+
message: e.message || e.text
147144
}))
148145
}
149146
}

packages/lu/src/parser/utils/helpers.js

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,18 @@ const helpers = {
7777
let linkValue = linkValueList[0].replace('(', '').replace(')', '');
7878
if (linkValue === '') throw (new exception(retCode.errorCode.INVALID_LU_FILE_REF, `[ERROR]: Invalid LU File Ref: "${utterance}"`));
7979
// reference can either be #<Intent-Name> or #? or /*#? or /**#? or #*utterance* or #<Intent-Name>*patterns*
80-
let splitRegExp = new RegExp(/^(?<fileName>.*?)(?<segment>#|\*+)(?<path>.*?)$/gim);
80+
let splitRegExp = new RegExp(/^(.*?)(#|\*+)(.*?)$/gim);
8181
let splitReference = splitRegExp.exec(linkValue);
82-
if (!splitReference) throw (new exception(retCode.errorCode.INVALID_LU_FILE_REF, `[ERROR]: Invalid LU File Ref: "${utterance}".\n Reference needs a qualifier - either a #Intent-Name or #? or *#? or **#? or #*utterances* etc.`));
82+
if (!splitReference) {
83+
throw (new exception(retCode.errorCode.INVALID_LU_FILE_REF, `[ERROR]: Invalid LU File Ref: "${utterance}".\n Reference needs a qualifier - either a #Intent-Name or #? or *#? or **#? or #*utterances* etc.`));
84+
} else {
85+
splitReference.groups = {
86+
fileName: splitReference[1],
87+
segment: splitReference[2],
88+
path: splitReference[3]
89+
}
90+
}
91+
8392
if (splitReference.groups.fileName && srcId && luSearchFn) {
8493
let luObjects = await luSearchFn(srcId, [{filePath: splitReference.groups.fileName, includeInCollate: false}])
8594
if (luObjects && luObjects.length > 0) splitReference.groups.fileName = luObjects[0].id
@@ -103,9 +112,18 @@ const helpers = {
103112
let linkValue = linkValueList[0].replace('(', '').replace(')', '');
104113
if (linkValue === '') throw (new exception(retCode.errorCode.INVALID_LU_FILE_REF, `[ERROR]: Invalid LU File Ref: "${utterance}"`));
105114
// reference can either be #<Intent-Name> or #? or /*#? or /**#? or #*utterance* or #<Intent-Name>*patterns*
106-
let splitRegExp = new RegExp(/^(?<fileName>.*?)(?<segment>#|\*+)(?<path>.*?)$/gim);
115+
let splitRegExp = new RegExp(/^(.*?)(#|\*+)(.*?)$/gim);
107116
let splitReference = splitRegExp.exec(linkValue);
108-
if (!splitReference) throw (new exception(retCode.errorCode.INVALID_LU_FILE_REF, `[ERROR]: Invalid LU File Ref: "${utterance}".\n Reference needs a qualifier - either a #Intent-Name or #? or *#? or **#? or #*utterances* etc.`));
117+
if (!splitReference) {
118+
throw (new exception(retCode.errorCode.INVALID_LU_FILE_REF, `[ERROR]: Invalid LU File Ref: "${utterance}".\n Reference needs a qualifier - either a #Intent-Name or #? or *#? or **#? or #*utterances* etc.`));
119+
} else {
120+
splitReference.groups = {
121+
fileName: splitReference[1],
122+
segment: splitReference[2],
123+
path: splitReference[3]
124+
}
125+
}
126+
109127
if (splitReference.groups.segment.includes('*')) {
110128
if (splitReference.groups.path === '') {
111129
throw (new exception(retCode.errorCode.INVALID_LU_FILE_REF, `[ERROR]: Invalid LU File Ref: "${utterance}".\n '*' and '**' can only be used with QnA qualitifier. e.g. *#? and **#?`));

packages/lu/test/parser/lufile/parseFileContents.configurable.test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,13 @@ describe('ValidateResource don\'t change resource in memory', () => {
183183
assert.equal(luresource.Sections.length, 2);
184184
});
185185
});
186+
187+
describe('Invalid utterance references', () => {
188+
it('Throw exception when utterance reference is invalid', function () {
189+
let fileContent = `# Cancel
190+
- [Cancel](./general)`;
191+
let luresource = luparser.parse(fileContent);
192+
let errors = validateResource(luresource);
193+
assert.include(errors[0].Message, '[ERROR]: Invalid LU File Ref: "[Cancel](./general)".')
194+
});
195+
});

0 commit comments

Comments
 (0)