mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-03 20:34:20 +01:00 
			
		
		
		
	fix: relationship label to be optional in ER diagram syntax
on-behalf-of: @Mermaid-Chart <hello@mermaidchart.com>
This commit is contained in:
		@@ -322,6 +322,18 @@ ORDER ||--|{ LINE-ITEM : contains
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render an ER diagram  without labels also', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
    erDiagram
 | 
			
		||||
        BOOK }|..|{ AUTHOR 
 | 
			
		||||
        BOOK }|..|{ GENRE
 | 
			
		||||
        AUTHOR }|..|{ GENRE 
 | 
			
		||||
      `,
 | 
			
		||||
      { logLevel: 1 }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should render relationship labels with line breaks', () => {
 | 
			
		||||
    imgSnapshotTest(
 | 
			
		||||
      `
 | 
			
		||||
 
 | 
			
		||||
@@ -94,6 +94,22 @@ start
 | 
			
		||||
    : 'ER_DIAGRAM' document 'EOF' { /*console.log('finished parsing');*/ }
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
relationship
 | 
			
		||||
  : ENTITY relationType ENTITY maybeRole
 | 
			
		||||
    {
 | 
			
		||||
      yy.addRelationship($1, $4, $3, $2);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
maybeRole
 | 
			
		||||
  : COLON role
 | 
			
		||||
    {
 | 
			
		||||
      $$ = $2;
 | 
			
		||||
    }
 | 
			
		||||
  | /* empty */
 | 
			
		||||
    {
 | 
			
		||||
      $$ = '';
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
document
 | 
			
		||||
	: /* empty */ { $$ = [] }
 | 
			
		||||
	| document line {$1.push($2);$$ = $1}
 | 
			
		||||
@@ -108,32 +124,34 @@ line
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
statement
 | 
			
		||||
    : entityName relSpec entityName COLON role
 | 
			
		||||
    : entityName relSpec entityName maybeRole
 | 
			
		||||
      {
 | 
			
		||||
          yy.addEntity($1);
 | 
			
		||||
          yy.addEntity($3);
 | 
			
		||||
          yy.addRelationship($1, $5, $3, $2);
 | 
			
		||||
          yy.addRelationship($1, $4, $3, $2);
 | 
			
		||||
      }
 | 
			
		||||
    | entityName STYLE_SEPARATOR idList relSpec entityName STYLE_SEPARATOR idList COLON role
 | 
			
		||||
    | entityName STYLE_SEPARATOR idList relSpec entityName STYLE_SEPARATOR idList maybeRole
 | 
			
		||||
 | 
			
		||||
      {
 | 
			
		||||
          yy.addEntity($1);
 | 
			
		||||
          yy.addEntity($5);
 | 
			
		||||
          yy.addRelationship($1, $9, $5, $4);
 | 
			
		||||
          yy.addRelationship($1, $8, $5, $4);
 | 
			
		||||
          yy.setClass([$1], $3);
 | 
			
		||||
          yy.setClass([$5], $7);
 | 
			
		||||
      }
 | 
			
		||||
    | entityName STYLE_SEPARATOR idList relSpec entityName COLON role
 | 
			
		||||
    | entityName STYLE_SEPARATOR idList relSpec entityName maybeRole
 | 
			
		||||
 | 
			
		||||
      {
 | 
			
		||||
          yy.addEntity($1);
 | 
			
		||||
          yy.addEntity($5);
 | 
			
		||||
          yy.addRelationship($1, $7, $5, $4);
 | 
			
		||||
          yy.addRelationship($1, $6, $5, $4);
 | 
			
		||||
          yy.setClass([$1], $3);
 | 
			
		||||
      }
 | 
			
		||||
    | entityName relSpec entityName STYLE_SEPARATOR idList COLON role
 | 
			
		||||
    | entityName relSpec entityName STYLE_SEPARATOR idList maybeRole
 | 
			
		||||
      {
 | 
			
		||||
          yy.addEntity($1);
 | 
			
		||||
          yy.addEntity($3);
 | 
			
		||||
          yy.addRelationship($1, $7, $3, $2);
 | 
			
		||||
          yy.addRelationship($1, $6, $3, $2);
 | 
			
		||||
          yy.setClass([$3], $5);
 | 
			
		||||
      }
 | 
			
		||||
    | entityName BLOCK_START attributes BLOCK_STOP
 | 
			
		||||
 
 | 
			
		||||
@@ -981,6 +981,12 @@ describe('when parsing ER diagram it...', function () {
 | 
			
		||||
      expect(rels[0].roleA).toBe('places');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should allow label as optional', function () {
 | 
			
		||||
      erDiagram.parser.parse('erDiagram\nCUSTOMER ||--|{ ORDER');
 | 
			
		||||
      const rels = erDb.getRelationships();
 | 
			
		||||
      expect(rels[0].roleA).toBe('');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should represent parent-child relationship correctly', function () {
 | 
			
		||||
      erDiagram.parser.parse('erDiagram\nPROJECT u--o{ TEAM_MEMBER : "parent"');
 | 
			
		||||
      const rels = erDb.getRelationships();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user