@@ -215,6 +215,8 @@ const updateToV7 = function(finalLUISJSON) {
215215const verifyPatternsDoNotHaveChildEntityReferences = function ( finalLUISJSON , entityParentTree )
216216{
217217 if ( finalLUISJSON . patterns === undefined || ! Array . isArray ( finalLUISJSON . patterns ) || finalLUISJSON . patterns . length === 0 ) return ;
218+ // update entityParentTree with all entity types.
219+ updateEntityParentTreeWithAllEntityTypes ( finalLUISJSON , entityParentTree ) ;
218220 ( finalLUISJSON . patterns || [ ] ) . forEach ( pattern => {
219221 // detect if pattern has an entity definition
220222 let entitiesRegExp = / { (?< entity > [ ^ { , } ] + ) } / gmi;
@@ -225,7 +227,9 @@ const verifyPatternsDoNotHaveChildEntityReferences = function(finalLUISJSON, ent
225227 entity = entity . replace ( / [ { } ] / g, '' ) ;
226228 let entityInTree = entityParentTree [ entity ]
227229 if ( entityInTree !== undefined ) {
228- if ( entityInTree [ 0 ] != "$root$" ) {
230+ // at least one of these need to be a root entity.
231+ let isEntityAlsoRoot = entityInTree . find ( item => item [ 0 ] === "$root$" ) ;
232+ if ( isEntityAlsoRoot === undefined ) {
229233 throw ( new exception ( retCode . errorCode . INVALID_INPUT , `Patterns cannot contain references to child entities. Pattern: "${ pattern . pattern } " has reference to "{${ entity } }".` ) ) ;
230234 }
231235 }
@@ -234,6 +238,26 @@ const verifyPatternsDoNotHaveChildEntityReferences = function(finalLUISJSON, ent
234238 } )
235239}
236240
241+ const updateEntityParentTreeWithAllEntityTypes = function ( finalLUISJSON , entityParentTree )
242+ {
243+ ( finalLUISJSON . prebuiltEntities || [ ] ) . forEach ( entity => addEntityToParentTree ( entityParentTree , entity . name ) ) ;
244+ ( finalLUISJSON . patternAnyEntities || [ ] ) . forEach ( entity => addEntityToParentTree ( entityParentTree , entity . name ) ) ;
245+ ( finalLUISJSON . model_features || [ ] ) . forEach ( entity => addEntityToParentTree ( entityParentTree , entity . name ) ) ;
246+ ( finalLUISJSON . phraselists || [ ] ) . forEach ( entity => addEntityToParentTree ( entityParentTree , entity . name ) ) ;
247+ ( finalLUISJSON . regex_entities || [ ] ) . forEach ( entity => addEntityToParentTree ( entityParentTree , entity . name ) ) ;
248+ ( finalLUISJSON . closedLists || [ ] ) . forEach ( entity => addEntityToParentTree ( entityParentTree , entity . name ) ) ;
249+ ( finalLUISJSON . composites || [ ] ) . forEach ( entity => addEntityToParentTree ( entityParentTree , entity . name ) ) ;
250+ }
251+
252+ const addEntityToParentTree = function ( entityParentTree , entityName )
253+ {
254+ if ( entityParentTree [ entityName ] === undefined ) {
255+ entityParentTree [ entityName ] = [ [ "$root$" ] ] ;
256+ } else {
257+ entityParentTree [ entityName ] . push ( [ "$root$" ] ) ;
258+ }
259+ }
260+
237261const constructEntityParentTree = function ( entityCollection , entityParentTree , curPath )
238262{
239263 entityCollection . forEach ( entity => {
0 commit comments