summaryrefslogtreecommitdiff
path: root/themes/blowfish/assets/lib/mermaid/erDiagram-779a1e9e.js.map
blob: d2b3e10650566a488b672ca872a3c4905bdc2218 (plain)
1
{"version":3,"file":"erDiagram-779a1e9e.js","sources":["../src/diagrams/er/parser/erDiagram.jison","../src/diagrams/er/erDb.js","../src/diagrams/er/erMarkers.js","../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/regex.js","../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/validate.js","../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/stringify.js","../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/parse.js","../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/v35.js","../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/sha1.js","../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/v5.js","../src/diagrams/er/erRenderer.js","../src/diagrams/er/styles.js","../src/diagrams/er/erDiagram.ts"],"sourcesContent":["%lex\n\n%options case-insensitive\n%x open_directive type_directive arg_directive block\n%x acc_title\n%x acc_descr\n%x acc_descr_multiline\n\n%%\naccTitle\\s*\":\"\\s*                                               { this.begin(\"acc_title\");return 'acc_title'; }\n<acc_title>(?!\\n|;|#)*[^\\n]*                                    { this.popState(); return \"acc_title_value\"; }\naccDescr\\s*\":\"\\s*                                               { this.begin(\"acc_descr\");return 'acc_descr'; }\n<acc_descr>(?!\\n|;|#)*[^\\n]*                                    { this.popState(); return \"acc_descr_value\"; }\naccDescr\\s*\"{\"\\s*                                { this.begin(\"acc_descr_multiline\");}\n<acc_descr_multiline>[\\}]                       { this.popState(); }\n<acc_descr_multiline>[^\\}]*                     return \"acc_descr_multiline_value\";\n\\%\\%\\{                                                          { this.begin('open_directive'); return 'open_directive'; }\n<open_directive>((?:(?!\\}\\%\\%)[^:.])*)                          { this.begin('type_directive'); return 'type_directive'; }\n<type_directive>\":\"                                             { this.popState(); this.begin('arg_directive'); return ':'; }\n<type_directive,arg_directive>\\}\\%\\%                            { this.popState(); this.popState(); return 'close_directive'; }\n<arg_directive>((?:(?!\\}\\%\\%).|\\n)*)                            return 'arg_directive';\n\\%%(?!\\{)[^\\n]*                                                 /* skip comments */\n[^\\}]\\%\\%[^\\n]*                                                 /* skip comments */\n[\\n]+                           return 'NEWLINE';\n\\s+                             /* skip whitespace */\n[\\s]+                           return 'SPACE';\n\\\"[^\"%\\r\\n\\v\\b\\\\]+\\\"            return 'ENTITY_NAME';\n\\\"[^\"]*\\\"                       return 'WORD';\n\"erDiagram\"                     return 'ER_DIAGRAM';\n\"{\"                             { this.begin(\"block\"); return 'BLOCK_START'; }\n<block>\",\"                      return 'COMMA';\n<block>\\s+                      /* skip whitespace in block */\n<block>\\b((?:PK)|(?:FK)|(?:UK))\\b      return 'ATTRIBUTE_KEY'\n<block>(.*?)[~](.*?)*[~]        return 'ATTRIBUTE_WORD';\n<block>[A-Za-z_][A-Za-z0-9\\-_\\[\\]\\(\\)]*  return 'ATTRIBUTE_WORD'\n<block>\\\"[^\"]*\\\"                return 'COMMENT';\n<block>[\\n]+                    /* nothing */\n<block>\\%%(?!\\{)[^\\n]*          /* skip comments in attribute block */\n<block>[^\\}]\\%\\%[^\\n]*          /* skip comments in attribute block */\n<block>\"}\"                      { this.popState(); return 'BLOCK_STOP'; }\n<block>.                        return yytext[0];\n\n\"one or zero\"                   return 'ZERO_OR_ONE';\n\"one or more\"                   return 'ONE_OR_MORE';\n\"one or many\"                   return 'ONE_OR_MORE';\n\"1+\"                            return 'ONE_OR_MORE';\n\\|o                             return 'ZERO_OR_ONE';\n\"zero or one\"                   return 'ZERO_OR_ONE';\n\"zero or more\"                  return 'ZERO_OR_MORE';\n\"zero or many\"                  return 'ZERO_OR_MORE';\n\"0+\"                            return 'ZERO_OR_MORE';\n\\}o                             return 'ZERO_OR_MORE';\n\"many(0)\"                       return 'ZERO_OR_MORE';\n\"many(1)\"                       return 'ONE_OR_MORE';\n\"many\"                          return 'ZERO_OR_MORE';\n\\}\\|                            return 'ONE_OR_MORE';\n\"one\"                           return 'ONLY_ONE';\n\"only one\"                      return 'ONLY_ONE';\n\"1\"                             return 'ONLY_ONE';\n\\|\\|                            return 'ONLY_ONE';\no\\|                             return 'ZERO_OR_ONE';\no\\{                             return 'ZERO_OR_MORE';\n\\|\\{                            return 'ONE_OR_MORE';\n\\.\\.                            return 'NON_IDENTIFYING';\n\\-\\-                            return 'IDENTIFYING';\n\"to\"                            return 'IDENTIFYING';\n\"optionally to\"                 return 'NON_IDENTIFYING';\n\\.\\-                            return 'NON_IDENTIFYING';\n\\-\\.                            return 'NON_IDENTIFYING';\n[A-Za-z][A-Za-z0-9\\-_]*         return 'ALPHANUM';\n.                               return yytext[0];\n<<EOF>>                         return 'EOF';\n\n/lex\n\n%start start\n%% /* language grammar */\n\nstart\n    : 'ER_DIAGRAM' document 'EOF' { /*console.log('finished parsing');*/ }\n  \t| directive start\n    ;\n\ndocument\n\t: /* empty */ { $$ = [] }\n\t| document line {$1.push($2);$$ = $1}\n\t;\n\nline\n\t: SPACE statement { $$ = $2 }\n\t| statement { $$ = $1 }\n\t| NEWLINE { $$=[];}\n\t| EOF { $$=[];}\n\t;\n\ndirective\n  : openDirective typeDirective closeDirective 'NEWLINE'\n  | openDirective typeDirective ':' argDirective closeDirective 'NEWLINE'\n  ;\n\nstatement\n    : directive\n    | entityName relSpec entityName ':' role\n      {\n          yy.addEntity($1);\n          yy.addEntity($3);\n          yy.addRelationship($1, $5, $3, $2);\n          /*console.log($1 + $2 + $3 + ':' + $5);*/\n      }\n    | entityName BLOCK_START attributes BLOCK_STOP\n      {\n          /* console.log('detected block'); */\n          yy.addEntity($1);\n          yy.addAttributes($1, $3);\n          /* console.log('handled block'); */\n      }\n    | entityName BLOCK_START BLOCK_STOP { yy.addEntity($1); }\n    | entityName { yy.addEntity($1); }\n    | title title_value  { $$=$2.trim();yy.setAccTitle($$); }\n    | acc_title acc_title_value  { $$=$2.trim();yy.setAccTitle($$); }\n    | acc_descr acc_descr_value  { $$=$2.trim();yy.setAccDescription($$); }\n    | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); }\n    ;\n\nentityName\n    : 'ALPHANUM'      { $$ = $1; }\n    | 'ENTITY_NAME'      { $$ = $1.replace(/\"/g, ''); }\n    ;\n\nattributes\n    : attribute { $$ = [$1]; }\n    | attribute attributes { $2.push($1); $$=$2; }\n    ;\n\nattribute\n    : attributeType attributeName { $$ = { attributeType: $1, attributeName: $2 }; }\n    | attributeType attributeName attributeKeyTypeList { $$ = { attributeType: $1, attributeName: $2, attributeKeyTypeList: $3 }; }\n    | attributeType attributeName attributeComment { $$ = { attributeType: $1, attributeName: $2, attributeComment: $3 }; }\n    | attributeType attributeName attributeKeyTypeList attributeComment { $$ = { attributeType: $1, attributeName: $2, attributeKeyTypeList: $3, attributeComment: $4 }; }\n    ;\n\n\nattributeType\n    : ATTRIBUTE_WORD { $$=$1; }\n    ;\n\nattributeName\n    : ATTRIBUTE_WORD { $$=$1; }\n    ;\n\nattributeKeyTypeList\n    : attributeKeyType { $$ = [$1]; }\n    | attributeKeyTypeList COMMA attributeKeyType { $1.push($3); $$ = $1; }\n    ;\n\nattributeKeyType\n    : ATTRIBUTE_KEY { $$=$1; }\n    ;\n\nattributeComment\n    : COMMENT { $$=$1.replace(/\"/g, ''); }\n    ;\n\nrelSpec\n    : cardinality relType cardinality\n      {\n        $$ = { cardA: $3, relType: $2, cardB: $1 };\n        /*console.log('relSpec: ' + $3 + $2 + $1);*/\n      }\n    ;\n\ncardinality\n    : 'ZERO_OR_ONE'                  { $$ = yy.Cardinality.ZERO_OR_ONE; }\n    | 'ZERO_OR_MORE'                 { $$ = yy.Cardinality.ZERO_OR_MORE; }\n    | 'ONE_OR_MORE'                  { $$ = yy.Cardinality.ONE_OR_MORE; }\n    | 'ONLY_ONE'                     { $$ = yy.Cardinality.ONLY_ONE; }\n    ;\n\nrelType\n    : 'NON_IDENTIFYING'              { $$ = yy.Identification.NON_IDENTIFYING;  }\n    | 'IDENTIFYING'                  { $$ = yy.Identification.IDENTIFYING; }\n    ;\n\nrole\n    : 'WORD'      { $$ = $1.replace(/\"/g, ''); }\n    | 'ENTITY_NAME' { $$ = $1.replace(/\"/g, ''); }\n    | 'ALPHANUM'  { $$ = $1; }\n    ;\n\nopenDirective\n  : open_directive { yy.parseDirective('%%{', 'open_directive'); }\n  ;\n\ntypeDirective\n  : type_directive { yy.parseDirective($1, 'type_directive'); }\n  ;\n\nargDirective\n  : arg_directive { $1 = $1.trim().replace(/'/g, '\"'); yy.parseDirective($1, 'arg_directive'); }\n  ;\n\ncloseDirective\n  : close_directive { yy.parseDirective('}%%', 'close_directive', 'er'); }\n  ;\n\n%%\n","import { log } from '../../logger';\nimport mermaidAPI from '../../mermaidAPI';\nimport * as configApi from '../../config';\n\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n  setDiagramTitle,\n  getDiagramTitle,\n} from '../../commonDb';\n\nlet entities = {};\nlet relationships = [];\n\nconst Cardinality = {\n  ZERO_OR_ONE: 'ZERO_OR_ONE',\n  ZERO_OR_MORE: 'ZERO_OR_MORE',\n  ONE_OR_MORE: 'ONE_OR_MORE',\n  ONLY_ONE: 'ONLY_ONE',\n};\n\nconst Identification = {\n  NON_IDENTIFYING: 'NON_IDENTIFYING',\n  IDENTIFYING: 'IDENTIFYING',\n};\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\nconst addEntity = function (name) {\n  if (entities[name] === undefined) {\n    entities[name] = { attributes: [] };\n    log.info('Added new entity :', name);\n  }\n\n  return entities[name];\n};\n\nconst getEntities = () => entities;\n\nconst addAttributes = function (entityName, attribs) {\n  let entity = addEntity(entityName); // May do nothing (if entity has already been added)\n\n  // Process attribs in reverse order due to effect of recursive construction (last attribute is first)\n  let i;\n  for (i = attribs.length - 1; i >= 0; i--) {\n    entity.attributes.push(attribs[i]);\n    log.debug('Added attribute ', attribs[i].attributeName);\n  }\n};\n\n/**\n * Add a relationship\n *\n * @param entA The first entity in the relationship\n * @param rolA The role played by the first entity in relation to the second\n * @param entB The second entity in the relationship\n * @param rSpec The details of the relationship between the two entities\n */\nconst addRelationship = function (entA, rolA, entB, rSpec) {\n  let rel = {\n    entityA: entA,\n    roleA: rolA,\n    entityB: entB,\n    relSpec: rSpec,\n  };\n\n  relationships.push(rel);\n  log.debug('Added new relationship :', rel);\n};\n\nconst getRelationships = () => relationships;\n\nconst clear = function () {\n  entities = {};\n  relationships = [];\n  commonClear();\n};\n\nexport default {\n  Cardinality,\n  Identification,\n  parseDirective,\n  getConfig: () => configApi.getConfig().er,\n  addEntity,\n  addAttributes,\n  getEntities,\n  addRelationship,\n  getRelationships,\n  clear,\n  setAccTitle,\n  getAccTitle,\n  setAccDescription,\n  getAccDescription,\n  setDiagramTitle,\n  getDiagramTitle,\n};\n","const ERMarkers = {\n  ONLY_ONE_START: 'ONLY_ONE_START',\n  ONLY_ONE_END: 'ONLY_ONE_END',\n  ZERO_OR_ONE_START: 'ZERO_OR_ONE_START',\n  ZERO_OR_ONE_END: 'ZERO_OR_ONE_END',\n  ONE_OR_MORE_START: 'ONE_OR_MORE_START',\n  ONE_OR_MORE_END: 'ONE_OR_MORE_END',\n  ZERO_OR_MORE_START: 'ZERO_OR_MORE_START',\n  ZERO_OR_MORE_END: 'ZERO_OR_MORE_END',\n};\n\n/**\n * Put the markers into the svg DOM for later use with edge paths\n *\n * @param elem\n * @param conf\n */\nconst insertMarkers = function (elem, conf) {\n  let marker;\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ONLY_ONE_START)\n    .attr('refX', 0)\n    .attr('refY', 9)\n    .attr('markerWidth', 18)\n    .attr('markerHeight', 18)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M9,0 L9,18 M15,0 L15,18');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ONLY_ONE_END)\n    .attr('refX', 18)\n    .attr('refY', 9)\n    .attr('markerWidth', 18)\n    .attr('markerHeight', 18)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M3,0 L3,18 M9,0 L9,18');\n\n  marker = elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ZERO_OR_ONE_START)\n    .attr('refX', 0)\n    .attr('refY', 9)\n    .attr('markerWidth', 30)\n    .attr('markerHeight', 18)\n    .attr('orient', 'auto');\n  marker\n    .append('circle')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'white')\n    .attr('cx', 21)\n    .attr('cy', 9)\n    .attr('r', 6);\n  marker.append('path').attr('stroke', conf.stroke).attr('fill', 'none').attr('d', 'M9,0 L9,18');\n\n  marker = elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ZERO_OR_ONE_END)\n    .attr('refX', 30)\n    .attr('refY', 9)\n    .attr('markerWidth', 30)\n    .attr('markerHeight', 18)\n    .attr('orient', 'auto');\n  marker\n    .append('circle')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'white')\n    .attr('cx', 9)\n    .attr('cy', 9)\n    .attr('r', 6);\n  marker.append('path').attr('stroke', conf.stroke).attr('fill', 'none').attr('d', 'M21,0 L21,18');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ONE_OR_MORE_START)\n    .attr('refX', 18)\n    .attr('refY', 18)\n    .attr('markerWidth', 45)\n    .attr('markerHeight', 36)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ONE_OR_MORE_END)\n    .attr('refX', 27)\n    .attr('refY', 18)\n    .attr('markerWidth', 45)\n    .attr('markerHeight', 36)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18');\n\n  marker = elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ZERO_OR_MORE_START)\n    .attr('refX', 18)\n    .attr('refY', 18)\n    .attr('markerWidth', 57)\n    .attr('markerHeight', 36)\n    .attr('orient', 'auto');\n  marker\n    .append('circle')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'white')\n    .attr('cx', 48)\n    .attr('cy', 18)\n    .attr('r', 6);\n  marker\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M0,18 Q18,0 36,18 Q18,36 0,18');\n\n  marker = elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ZERO_OR_MORE_END)\n    .attr('refX', 39)\n    .attr('refY', 18)\n    .attr('markerWidth', 57)\n    .attr('markerHeight', 36)\n    .attr('orient', 'auto');\n  marker\n    .append('circle')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'white')\n    .attr('cx', 9)\n    .attr('cy', 18)\n    .attr('r', 6);\n  marker\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M21,18 Q39,0 57,18 Q39,36 21,18');\n\n  return;\n};\n\nexport default {\n  ERMarkers,\n  insertMarkers,\n};\n","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n  return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;","import validate from './validate.js';\n\nfunction parse(uuid) {\n  if (!validate(uuid)) {\n    throw TypeError('Invalid UUID');\n  }\n\n  let v;\n  const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n  arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n  arr[1] = v >>> 16 & 0xff;\n  arr[2] = v >>> 8 & 0xff;\n  arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n  arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n  arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n  arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n  arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n  arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n  arr[9] = v & 0xff; // Parse ........-....-....-....-############\n  // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n  arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n  arr[11] = v / 0x100000000 & 0xff;\n  arr[12] = v >>> 24 & 0xff;\n  arr[13] = v >>> 16 & 0xff;\n  arr[14] = v >>> 8 & 0xff;\n  arr[15] = v & 0xff;\n  return arr;\n}\n\nexport default parse;","import { unsafeStringify } from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n  str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n  const bytes = [];\n\n  for (let i = 0; i < str.length; ++i) {\n    bytes.push(str.charCodeAt(i));\n  }\n\n  return bytes;\n}\n\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function v35(name, version, hashfunc) {\n  function generateUUID(value, namespace, buf, offset) {\n    var _namespace;\n\n    if (typeof value === 'string') {\n      value = stringToBytes(value);\n    }\n\n    if (typeof namespace === 'string') {\n      namespace = parse(namespace);\n    }\n\n    if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {\n      throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n    } // Compute hash of namespace and value, Per 4.3\n    // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n    // hashfunc([...namespace, ... value])`\n\n\n    let bytes = new Uint8Array(16 + value.length);\n    bytes.set(namespace);\n    bytes.set(value, namespace.length);\n    bytes = hashfunc(bytes);\n    bytes[6] = bytes[6] & 0x0f | version;\n    bytes[8] = bytes[8] & 0x3f | 0x80;\n\n    if (buf) {\n      offset = offset || 0;\n\n      for (let i = 0; i < 16; ++i) {\n        buf[offset + i] = bytes[i];\n      }\n\n      return buf;\n    }\n\n    return unsafeStringify(bytes);\n  } // Function#name is not settable on some platforms (#270)\n\n\n  try {\n    generateUUID.name = name; // eslint-disable-next-line no-empty\n  } catch (err) {} // For CommonJS default export support\n\n\n  generateUUID.DNS = DNS;\n  generateUUID.URL = URL;\n  return generateUUID;\n}","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n  switch (s) {\n    case 0:\n      return x & y ^ ~x & z;\n\n    case 1:\n      return x ^ y ^ z;\n\n    case 2:\n      return x & y ^ x & z ^ y & z;\n\n    case 3:\n      return x ^ y ^ z;\n  }\n}\n\nfunction ROTL(x, n) {\n  return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n  const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n  const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n  if (typeof bytes === 'string') {\n    const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n    bytes = [];\n\n    for (let i = 0; i < msg.length; ++i) {\n      bytes.push(msg.charCodeAt(i));\n    }\n  } else if (!Array.isArray(bytes)) {\n    // Convert Array-like to Array\n    bytes = Array.prototype.slice.call(bytes);\n  }\n\n  bytes.push(0x80);\n  const l = bytes.length / 4 + 2;\n  const N = Math.ceil(l / 16);\n  const M = new Array(N);\n\n  for (let i = 0; i < N; ++i) {\n    const arr = new Uint32Array(16);\n\n    for (let j = 0; j < 16; ++j) {\n      arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n    }\n\n    M[i] = arr;\n  }\n\n  M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n  M[N - 1][14] = Math.floor(M[N - 1][14]);\n  M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n  for (let i = 0; i < N; ++i) {\n    const W = new Uint32Array(80);\n\n    for (let t = 0; t < 16; ++t) {\n      W[t] = M[i][t];\n    }\n\n    for (let t = 16; t < 80; ++t) {\n      W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n    }\n\n    let a = H[0];\n    let b = H[1];\n    let c = H[2];\n    let d = H[3];\n    let e = H[4];\n\n    for (let t = 0; t < 80; ++t) {\n      const s = Math.floor(t / 20);\n      const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n      e = d;\n      d = c;\n      c = ROTL(b, 30) >>> 0;\n      b = a;\n      a = T;\n    }\n\n    H[0] = H[0] + a >>> 0;\n    H[1] = H[1] + b >>> 0;\n    H[2] = H[2] + c >>> 0;\n    H[3] = H[3] + d >>> 0;\n    H[4] = H[4] + e >>> 0;\n  }\n\n  return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nconst v5 = v35('v5', 0x50, sha1);\nexport default v5;","import * as graphlib from 'dagre-d3-es/src/graphlib/index.js';\nimport { line, curveBasis, select } from 'd3';\nimport { layout as dagreLayout } from 'dagre-d3-es/src/dagre/index.js';\nimport { getConfig } from '../../config';\nimport { log } from '../../logger';\nimport utils from '../../utils';\nimport erMarkers from './erMarkers';\nimport { configureSvgSize } from '../../setupGraphViewbox';\nimport { parseGenericTypes } from '../common/common';\nimport { v5 as uuid5 } from 'uuid';\n\n/** Regex used to remove chars from the entity name so the result can be used in an id */\nconst BAD_ID_CHARS_REGEXP = /[^\\dA-Za-z](\\W)*/g;\n\n// Configuration\nlet conf = {};\n\n// Map so we can look up the id of an entity based on the name\nlet entityNameIds = new Map();\n\n/**\n * Allows the top-level API module to inject config specific to this renderer, storing it in the\n * local conf object. Note that generic config still needs to be retrieved using getConfig()\n * imported from the config module\n *\n * @param cnf\n */\nexport const setConf = function (cnf) {\n  const keys = Object.keys(cnf);\n  for (const key of keys) {\n    conf[key] = cnf[key];\n  }\n};\n\n/**\n * Draw attributes for an entity\n *\n * @param groupNode The svg group node for the entity\n * @param entityTextNode The svg node for the entity label text\n * @param attributes An array of attributes defined for the entity (each attribute has a type and a\n *   name)\n * @returns {object} The bounding box of the entity, after attributes have been added. The bounding\n *   box has a .width and .height\n */\nconst drawAttributes = (groupNode, entityTextNode, attributes) => {\n  const heightPadding = conf.entityPadding / 3; // Padding internal to attribute boxes\n  const widthPadding = conf.entityPadding / 3; // Ditto\n  const attrFontSize = conf.fontSize * 0.85;\n  const labelBBox = entityTextNode.node().getBBox();\n  const attributeNodes = []; // Intermediate storage for attribute nodes created so that we can do a second pass\n  let hasKeyType = false;\n  let hasComment = false;\n  let maxTypeWidth = 0;\n  let maxNameWidth = 0;\n  let maxKeyWidth = 0;\n  let maxCommentWidth = 0;\n  let cumulativeHeight = labelBBox.height + heightPadding * 2;\n  let attrNum = 1;\n\n  // Check to see if any of the attributes has a key or a comment\n  attributes.forEach((item) => {\n    if (item.attributeKeyTypeList !== undefined && item.attributeKeyTypeList.length > 0) {\n      hasKeyType = true;\n    }\n\n    if (item.attributeComment !== undefined) {\n      hasComment = true;\n    }\n  });\n\n  attributes.forEach((item) => {\n    const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`;\n    let nodeHeight = 0;\n\n    const attributeType = parseGenericTypes(item.attributeType);\n\n    // Add a text node for the attribute type\n    const typeNode = groupNode\n      .append('text')\n      .classed('er entityLabel', true)\n      .attr('id', `${attrPrefix}-type`)\n      .attr('x', 0)\n      .attr('y', 0)\n      .style('dominant-baseline', 'middle')\n      .style('text-anchor', 'left')\n      .style('font-family', getConfig().fontFamily)\n      .style('font-size', attrFontSize + 'px')\n      .text(attributeType);\n\n    // Add a text node for the attribute name\n    const nameNode = groupNode\n      .append('text')\n      .classed('er entityLabel', true)\n      .attr('id', `${attrPrefix}-name`)\n      .attr('x', 0)\n      .attr('y', 0)\n      .style('dominant-baseline', 'middle')\n      .style('text-anchor', 'left')\n      .style('font-family', getConfig().fontFamily)\n      .style('font-size', attrFontSize + 'px')\n      .text(item.attributeName);\n\n    const attributeNode = {};\n    attributeNode.tn = typeNode;\n    attributeNode.nn = nameNode;\n\n    const typeBBox = typeNode.node().getBBox();\n    const nameBBox = nameNode.node().getBBox();\n    maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width);\n    maxNameWidth = Math.max(maxNameWidth, nameBBox.width);\n\n    nodeHeight = Math.max(typeBBox.height, nameBBox.height);\n\n    if (hasKeyType) {\n      const keyTypeNodeText =\n        item.attributeKeyTypeList !== undefined ? item.attributeKeyTypeList.join(',') : '';\n\n      const keyTypeNode = groupNode\n        .append('text')\n        .classed('er entityLabel', true)\n        .attr('id', `${attrPrefix}-key`)\n        .attr('x', 0)\n        .attr('y', 0)\n        .style('dominant-baseline', 'middle')\n        .style('text-anchor', 'left')\n        .style('font-family', getConfig().fontFamily)\n        .style('font-size', attrFontSize + 'px')\n        .text(keyTypeNodeText);\n\n      attributeNode.kn = keyTypeNode;\n      const keyTypeBBox = keyTypeNode.node().getBBox();\n      maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width);\n      nodeHeight = Math.max(nodeHeight, keyTypeBBox.height);\n    }\n\n    if (hasComment) {\n      const commentNode = groupNode\n        .append('text')\n        .classed('er entityLabel', true)\n        .attr('id', `${attrPrefix}-comment`)\n        .attr('x', 0)\n        .attr('y', 0)\n        .style('dominant-baseline', 'middle')\n        .style('text-anchor', 'left')\n        .style('font-family', getConfig().fontFamily)\n        .style('font-size', attrFontSize + 'px')\n        .text(item.attributeComment || '');\n\n      attributeNode.cn = commentNode;\n      const commentNodeBBox = commentNode.node().getBBox();\n      maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width);\n      nodeHeight = Math.max(nodeHeight, commentNodeBBox.height);\n    }\n\n    attributeNode.height = nodeHeight;\n    // Keep a reference to the nodes so that we can iterate through them later\n    attributeNodes.push(attributeNode);\n    cumulativeHeight += nodeHeight + heightPadding * 2;\n    attrNum += 1;\n  });\n\n  let widthPaddingFactor = 4;\n  if (hasKeyType) {\n    widthPaddingFactor += 2;\n  }\n  if (hasComment) {\n    widthPaddingFactor += 2;\n  }\n\n  const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth;\n\n  // Calculate the new bounding box of the overall entity, now that attributes have been added\n  const bBox = {\n    width: Math.max(\n      conf.minEntityWidth,\n      Math.max(\n        labelBBox.width + conf.entityPadding * 2,\n        maxWidth + widthPadding * widthPaddingFactor\n      )\n    ),\n    height:\n      attributes.length > 0\n        ? cumulativeHeight\n        : Math.max(conf.minEntityHeight, labelBBox.height + conf.entityPadding * 2),\n  };\n\n  if (attributes.length > 0) {\n    // There might be some spare width for padding out attributes if the entity name is very long\n    const spareColumnWidth = Math.max(\n      0,\n      (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2)\n    );\n\n    // Position the entity label near the top of the entity bounding box\n    entityTextNode.attr(\n      'transform',\n      'translate(' + bBox.width / 2 + ',' + (heightPadding + labelBBox.height / 2) + ')'\n    );\n\n    // Add rectangular boxes for the attribute types/names\n    let heightOffset = labelBBox.height + heightPadding * 2; // Start at the bottom of the entity label\n    let attribStyle = 'attributeBoxOdd'; // We will flip the style on alternate rows to achieve a banded effect\n\n    attributeNodes.forEach((attributeNode) => {\n      // Calculate the alignment y co-ordinate for the type/name of the attribute\n      const alignY = heightOffset + heightPadding + attributeNode.height / 2;\n\n      // Position the type attribute\n      attributeNode.tn.attr('transform', 'translate(' + widthPadding + ',' + alignY + ')');\n\n      // TODO Handle spareWidth in attr('width')\n      // Insert a rectangle for the type\n      const typeRect = groupNode\n        .insert('rect', '#' + attributeNode.tn.node().id)\n        .classed(`er ${attribStyle}`, true)\n        .attr('x', 0)\n        .attr('y', heightOffset)\n        .attr('width', maxTypeWidth + widthPadding * 2 + spareColumnWidth)\n        .attr('height', attributeNode.height + heightPadding * 2);\n\n      const nameXOffset = parseFloat(typeRect.attr('x')) + parseFloat(typeRect.attr('width'));\n\n      // Position the name attribute\n      attributeNode.nn.attr(\n        'transform',\n        'translate(' + (nameXOffset + widthPadding) + ',' + alignY + ')'\n      );\n\n      // Insert a rectangle for the name\n      const nameRect = groupNode\n        .insert('rect', '#' + attributeNode.nn.node().id)\n        .classed(`er ${attribStyle}`, true)\n        .attr('x', nameXOffset)\n        .attr('y', heightOffset)\n        .attr('width', maxNameWidth + widthPadding * 2 + spareColumnWidth)\n        .attr('height', attributeNode.height + heightPadding * 2);\n\n      let keyTypeAndCommentXOffset =\n        parseFloat(nameRect.attr('x')) + parseFloat(nameRect.attr('width'));\n\n      if (hasKeyType) {\n        // Position the key type attribute\n        attributeNode.kn.attr(\n          'transform',\n          'translate(' + (keyTypeAndCommentXOffset + widthPadding) + ',' + alignY + ')'\n        );\n\n        // Insert a rectangle for the key type\n        const keyTypeRect = groupNode\n          .insert('rect', '#' + attributeNode.kn.node().id)\n          .classed(`er ${attribStyle}`, true)\n          .attr('x', keyTypeAndCommentXOffset)\n          .attr('y', heightOffset)\n          .attr('width', maxKeyWidth + widthPadding * 2 + spareColumnWidth)\n          .attr('height', attributeNode.height + heightPadding * 2);\n\n        keyTypeAndCommentXOffset =\n          parseFloat(keyTypeRect.attr('x')) + parseFloat(keyTypeRect.attr('width'));\n      }\n\n      if (hasComment) {\n        // Position the comment attribute\n        attributeNode.cn.attr(\n          'transform',\n          'translate(' + (keyTypeAndCommentXOffset + widthPadding) + ',' + alignY + ')'\n        );\n\n        // Insert a rectangle for the comment\n        groupNode\n          .insert('rect', '#' + attributeNode.cn.node().id)\n          .classed(`er ${attribStyle}`, 'true')\n          .attr('x', keyTypeAndCommentXOffset)\n          .attr('y', heightOffset)\n          .attr('width', maxCommentWidth + widthPadding * 2 + spareColumnWidth)\n          .attr('height', attributeNode.height + heightPadding * 2);\n      }\n\n      // Increment the height offset to move to the next row\n      heightOffset += attributeNode.height + heightPadding * 2;\n\n      // Flip the attribute style for row banding\n      attribStyle = attribStyle === 'attributeBoxOdd' ? 'attributeBoxEven' : 'attributeBoxOdd';\n    });\n  } else {\n    // Ensure the entity box is a decent size without any attributes\n    bBox.height = Math.max(conf.minEntityHeight, cumulativeHeight);\n\n    // Position the entity label in the middle of the box\n    entityTextNode.attr('transform', 'translate(' + bBox.width / 2 + ',' + bBox.height / 2 + ')');\n  }\n\n  return bBox;\n};\n\n/**\n * Use D3 to construct the svg elements for the entities\n *\n * @param svgNode The svg node that contains the diagram\n * @param entities The entities to be drawn\n * @param graph The graph that contains the vertex and edge definitions post-layout\n * @returns {object} The first entity that was inserted\n */\nconst drawEntities = function (svgNode, entities, graph) {\n  const keys = Object.keys(entities);\n  let firstOne;\n\n  keys.forEach(function (entityName) {\n    const entityId = generateId(entityName, 'entity');\n    entityNameIds.set(entityName, entityId);\n\n    // Create a group for each entity\n    const groupNode = svgNode.append('g').attr('id', entityId);\n\n    firstOne = firstOne === undefined ? entityId : firstOne;\n\n    // Label the entity - this is done first so that we can get the bounding box\n    // which then determines the size of the rectangle\n    const textId = 'text-' + entityId;\n    const textNode = groupNode\n      .append('text')\n      .classed('er entityLabel', true)\n      .attr('id', textId)\n      .attr('x', 0)\n      .attr('y', 0)\n      .style('dominant-baseline', 'middle')\n      .style('text-anchor', 'middle')\n      .style('font-family', getConfig().fontFamily)\n      .style('font-size', conf.fontSize + 'px')\n      .text(entityName);\n\n    const { width: entityWidth, height: entityHeight } = drawAttributes(\n      groupNode,\n      textNode,\n      entities[entityName].attributes\n    );\n\n    // Draw the rectangle - insert it before the text so that the text is not obscured\n    const rectNode = groupNode\n      .insert('rect', '#' + textId)\n      .classed('er entityBox', true)\n      .attr('x', 0)\n      .attr('y', 0)\n      .attr('width', entityWidth)\n      .attr('height', entityHeight);\n\n    const rectBBox = rectNode.node().getBBox();\n\n    // Add the entity to the graph using the entityId\n    graph.setNode(entityId, {\n      width: rectBBox.width,\n      height: rectBBox.height,\n      shape: 'rect',\n      id: entityId,\n    });\n  });\n  return firstOne;\n}; // drawEntities\n\nconst adjustEntities = function (svgNode, graph) {\n  graph.nodes().forEach(function (v) {\n    if (v !== undefined && graph.node(v) !== undefined) {\n      svgNode\n        .select('#' + v)\n        .attr(\n          'transform',\n          'translate(' +\n            (graph.node(v).x - graph.node(v).width / 2) +\n            ',' +\n            (graph.node(v).y - graph.node(v).height / 2) +\n            ' )'\n        );\n    }\n  });\n};\n\n/**\n * Construct a name for an edge based on the names of the 2 entities and the role (relationship)\n * between them. Remove any spaces from it\n *\n * @param rel - A (parsed) relationship (e.g. one of the objects in the list returned by\n *   erDb.getRelationships)\n * @returns {string}\n */\nconst getEdgeName = function (rel) {\n  return (rel.entityA + rel.roleA + rel.entityB).replace(/\\s/g, '');\n};\n\n/**\n * Add each relationship to the graph\n *\n * @param relationships The relationships to be added\n * @param g The graph\n * @returns {Array} The array of relationships\n */\nconst addRelationships = function (relationships, g) {\n  relationships.forEach(function (r) {\n    g.setEdge(\n      entityNameIds.get(r.entityA),\n      entityNameIds.get(r.entityB),\n      { relationship: r },\n      getEdgeName(r)\n    );\n  });\n  return relationships;\n}; // addRelationships\n\nlet relCnt = 0;\n/**\n * Draw a relationship using edge information from the graph\n *\n * @param svg The svg node\n * @param rel The relationship to draw in the svg\n * @param g The graph containing the edge information\n * @param insert The insertion point in the svg DOM (because relationships have markers that need to\n *   sit 'behind' opaque entity boxes)\n * @param diagObj\n */\nconst drawRelationshipFromLayout = function (svg, rel, g, insert, diagObj) {\n  relCnt++;\n\n  // Find the edge relating to this relationship\n  const edge = g.edge(\n    entityNameIds.get(rel.entityA),\n    entityNameIds.get(rel.entityB),\n    getEdgeName(rel)\n  );\n\n  // Get a function that will generate the line path\n  const lineFunction = line()\n    .x(function (d) {\n      return d.x;\n    })\n    .y(function (d) {\n      return d.y;\n    })\n    .curve(curveBasis);\n\n  // Insert the line at the right place\n  const svgPath = svg\n    .insert('path', '#' + insert)\n    .classed('er relationshipLine', true)\n    .attr('d', lineFunction(edge.points))\n    .style('stroke', conf.stroke)\n    .style('fill', 'none');\n\n  // ...and with dashes if necessary\n  if (rel.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) {\n    svgPath.attr('stroke-dasharray', '8,8');\n  }\n\n  // TODO: Understand this better\n  let url = '';\n  if (conf.arrowMarkerAbsolute) {\n    url =\n      window.location.protocol +\n      '//' +\n      window.location.host +\n      window.location.pathname +\n      window.location.search;\n    url = url.replace(/\\(/g, '\\\\(');\n    url = url.replace(/\\)/g, '\\\\)');\n  }\n\n  // Decide which start and end markers it needs. It may be possible to be more concise here\n  // by reversing a start marker to make an end marker...but this will do for now\n\n  // Note that the 'A' entity's marker is at the end of the relationship and the 'B' entity's marker is at the start\n  switch (rel.relSpec.cardA) {\n    case diagObj.db.Cardinality.ZERO_OR_ONE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_ONE_END + ')');\n      break;\n    case diagObj.db.Cardinality.ZERO_OR_MORE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_MORE_END + ')');\n      break;\n    case diagObj.db.Cardinality.ONE_OR_MORE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ONE_OR_MORE_END + ')');\n      break;\n    case diagObj.db.Cardinality.ONLY_ONE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ONLY_ONE_END + ')');\n      break;\n  }\n\n  switch (rel.relSpec.cardB) {\n    case diagObj.db.Cardinality.ZERO_OR_ONE:\n      svgPath.attr(\n        'marker-start',\n        'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_ONE_START + ')'\n      );\n      break;\n    case diagObj.db.Cardinality.ZERO_OR_MORE:\n      svgPath.attr(\n        'marker-start',\n        'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_MORE_START + ')'\n      );\n      break;\n    case diagObj.db.Cardinality.ONE_OR_MORE:\n      svgPath.attr(\n        'marker-start',\n        'url(' + url + '#' + erMarkers.ERMarkers.ONE_OR_MORE_START + ')'\n      );\n      break;\n    case diagObj.db.Cardinality.ONLY_ONE:\n      svgPath.attr('marker-start', 'url(' + url + '#' + erMarkers.ERMarkers.ONLY_ONE_START + ')');\n      break;\n  }\n\n  // Now label the relationship\n\n  // Find the half-way point\n  const len = svgPath.node().getTotalLength();\n  const labelPoint = svgPath.node().getPointAtLength(len * 0.5);\n\n  // Append a text node containing the label\n  const labelId = 'rel' + relCnt;\n\n  const labelNode = svg\n    .append('text')\n    .classed('er relationshipLabel', true)\n    .attr('id', labelId)\n    .attr('x', labelPoint.x)\n    .attr('y', labelPoint.y)\n    .style('text-anchor', 'middle')\n    .style('dominant-baseline', 'middle')\n    .style('font-family', getConfig().fontFamily)\n    .style('font-size', conf.fontSize + 'px')\n    .text(rel.roleA);\n\n  // Figure out how big the opaque 'container' rectangle needs to be\n  const labelBBox = labelNode.node().getBBox();\n\n  // Insert the opaque rectangle before the text label\n  svg\n    .insert('rect', '#' + labelId)\n    .classed('er relationshipLabelBox', true)\n    .attr('x', labelPoint.x - labelBBox.width / 2)\n    .attr('y', labelPoint.y - labelBBox.height / 2)\n    .attr('width', labelBBox.width)\n    .attr('height', labelBBox.height);\n};\n\n/**\n * Draw en E-R diagram in the tag with id: id based on the text definition of the diagram\n *\n * @param text The text of the diagram\n * @param id The unique id of the DOM node that contains the diagram\n * @param _version\n * @param diagObj\n */\nexport const draw = function (text, id, _version, diagObj) {\n  conf = getConfig().er;\n  log.info('Drawing ER diagram');\n  //  diag.db.clear();\n  const securityLevel = getConfig().securityLevel;\n  // Handle root and Document for when rendering in sandbox mode\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  // const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n  // Parse the text to populate erDb\n  // try {\n  //   parser.parse(text);\n  // } catch (err) {\n  //   log.debug('Parsing failed');\n  // }\n\n  // Get a reference to the svg node that contains the text\n  const svg = root.select(`[id='${id}']`);\n\n  // Add cardinality marker definitions to the svg\n  erMarkers.insertMarkers(svg, conf);\n\n  // Now we have to construct the diagram in a specific way:\n  // ---\n  // 1. Create all the entities in the svg node at 0,0, but with the correct dimensions (allowing for text content)\n  // 2. Make sure they are all added to the graph\n  // 3. Add all the edges (relationships) to the graph as well\n  // 4. Let dagre do its magic to lay out the graph.  This assigns:\n  //    - the centre co-ordinates for each node, bearing in mind the dimensions and edge relationships\n  //    - the path co-ordinates for each edge\n  //    But it has no impact on the svg child nodes - the diagram remains with every entity rooted at 0,0\n  // 5. Now assign a transform to each entity in the svg node so that it gets drawn in the correct place, as determined by\n  //    its centre point, which is obtained from the graph, and it's width and height\n  // 6. And finally, create all the edges in the svg node using information from the graph\n  // ---\n\n  // Create the graph\n  let g;\n\n  // TODO: Explore directed vs undirected graphs, and how the layout is affected\n  // An E-R diagram could be said to be undirected, but there is merit in setting\n  // the direction from parent to child in a one-to-many as this influences graphlib to\n  // put the parent above the child (does it?), which is intuitive.  Most relationships\n  // in ER diagrams are one-to-many.\n  g = new graphlib.Graph({\n    multigraph: true,\n    directed: true,\n    compound: false,\n  })\n    .setGraph({\n      rankdir: conf.layoutDirection,\n      marginx: 20,\n      marginy: 20,\n      nodesep: 100,\n      edgesep: 100,\n      ranksep: 100,\n    })\n    .setDefaultEdgeLabel(function () {\n      return {};\n    });\n\n  // Draw the entities (at 0,0), returning the first svg node that got\n  // inserted - this represents the insertion point for relationship paths\n  const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g);\n\n  // TODO: externalize the addition of entities to the graph - it's a bit 'buried' in the above\n\n  // Add all the relationships to the graph\n  const relationships = addRelationships(diagObj.db.getRelationships(), g);\n\n  dagreLayout(g); // Node and edge positions will be updated\n\n  // Adjust the positions of the entities so that they adhere to the layout\n  adjustEntities(svg, g);\n\n  // Draw the relationships\n  relationships.forEach(function (rel) {\n    drawRelationshipFromLayout(svg, rel, g, firstEntity, diagObj);\n  });\n\n  const padding = conf.diagramPadding;\n\n  utils.insertTitle(svg, 'entityTitleText', conf.titleTopMargin, diagObj.db.getDiagramTitle());\n\n  const svgBounds = svg.node().getBBox();\n  const width = svgBounds.width + padding * 2;\n  const height = svgBounds.height + padding * 2;\n\n  configureSvgSize(svg, height, width, conf.useMaxWidth);\n\n  svg.attr('viewBox', `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`);\n}; // draw\n\n/**\n * UUID namespace for ER diagram IDs\n *\n * This can be generated via running:\n *\n * ```js\n * const { v5: uuid5 } = await import('uuid');\n * uuid5(\n *   'https://mermaid-js.github.io/mermaid/syntax/entityRelationshipDiagram.html',\n *   uuid5.URL\n * );\n * ```\n */\nconst MERMAID_ERDIAGRAM_UUID = '28e9f9db-3c8d-5aa5-9faf-44286ae5937c';\n\n/**\n * Return a unique id based on the given string. Start with the prefix, then a hyphen, then the\n * simplified str, then a hyphen, then a unique uuid based on the str. (Hyphens are only included if needed.)\n * Although the official XML standard for ids says that many more characters are valid in the id,\n * this keeps things simple by accepting only A-Za-z0-9.\n *\n * @param {string} str Given string to use as the basis for the id. Default is `''`\n * @param {string} prefix String to put at the start, followed by '-'. Default is `''`\n * @returns {string}\n * @see https://www.w3.org/TR/xml/#NT-Name\n */\nexport function generateId(str = '', prefix = '') {\n  const simplifiedStr = str.replace(BAD_ID_CHARS_REGEXP, '');\n  // we use `uuid v5` so that UUIDs are consistent given a string.\n  return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${uuid5(\n    str,\n    MERMAID_ERDIAGRAM_UUID\n  )}`;\n}\n\n/**\n * Append a hyphen to a string only if the string isn't empty\n *\n * @param {string} str\n * @returns {string}\n * @todo This could be moved into a string utility file/class.\n */\nfunction strWithHyphen(str = '') {\n  return str.length > 0 ? `${str}-` : '';\n}\n\nexport default {\n  setConf,\n  draw,\n};\n","const getStyles = (options) =>\n  `\n  .entityBox {\n    fill: ${options.mainBkg};\n    stroke: ${options.nodeBorder};\n  }\n\n  .attributeBoxOdd {\n    fill: ${options.attributeBackgroundColorOdd};\n    stroke: ${options.nodeBorder};\n  }\n\n  .attributeBoxEven {\n    fill:  ${options.attributeBackgroundColorEven};\n    stroke: ${options.nodeBorder};\n  }\n\n  .relationshipLabelBox {\n    fill: ${options.tertiaryColor};\n    opacity: 0.7;\n    background-color: ${options.tertiaryColor};\n      rect {\n        opacity: 0.5;\n      }\n  }\n\n    .relationshipLine {\n      stroke: ${options.lineColor};\n    }\n\n  .entityTitleText {\n    text-anchor: middle;\n    font-size: 18px;\n    fill: ${options.textColor};\n  }    \n`;\n\nexport default getStyles;\n","// @ts-ignore: TODO Fix ts errors\nimport erParser from './parser/erDiagram';\nimport erDb from './erDb';\nimport erRenderer from './erRenderer';\nimport erStyles from './styles';\n\nexport const diagram = {\n  parser: erParser,\n  db: erDb,\n  renderer: erRenderer,\n  styles: erStyles,\n};\n"],"names":["parser","o","k","v","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","yytext","yyleng","yylineno","yy","yystate","$$","_$","$0","str","hash","error","input","self","stack","tstack","vstack","lstack","table","TERROR","EOF","args","lexer","sharedState","yyloc","ranges","lex","token","symbol","state","action","r","yyval","p","len","newState","expected","errStr","ch","lines","oldLines","past","next","pre","c","match","indexed_rule","backup","tempMatch","index","rules","condition","n","yy_","$avoiding_name_collisions","YY_START","Parser","entities","relationships","Cardinality","Identification","parseDirective","statement","context","type","mermaidAPI","addEntity","name","log","getEntities","addAttributes","entityName","attribs","entity","i","addRelationship","entA","rolA","entB","rSpec","rel","getRelationships","clear","commonClear","erDb","configApi.getConfig","setAccTitle","getAccTitle","setAccDescription","getAccDescription","setDiagramTitle","getDiagramTitle","ERMarkers","insertMarkers","elem","conf","marker","erMarkers","REGEX","validate","uuid","byteToHex","unsafeStringify","arr","offset","parse","stringToBytes","bytes","DNS","URL","v35","version","hashfunc","generateUUID","value","namespace","buf","_namespace","f","s","x","y","z","ROTL","sha1","K","H","msg","N","M","j","W","t","a","b","d","e","T","v5","uuid5","BAD_ID_CHARS_REGEXP","entityNameIds","setConf","cnf","keys","key","drawAttributes","groupNode","entityTextNode","attributes","heightPadding","widthPadding","attrFontSize","labelBBox","attributeNodes","hasKeyType","hasComment","maxTypeWidth","maxNameWidth","maxKeyWidth","maxCommentWidth","cumulativeHeight","attrNum","item","attrPrefix","nodeHeight","attributeType","parseGenericTypes","typeNode","getConfig","nameNode","attributeNode","typeBBox","nameBBox","keyTypeNodeText","keyTypeNode","keyTypeBBox","commentNode","commentNodeBBox","widthPaddingFactor","maxWidth","bBox","spareColumnWidth","heightOffset","attribStyle","alignY","typeRect","nameXOffset","nameRect","keyTypeAndCommentXOffset","keyTypeRect","drawEntities","svgNode","graph","firstOne","entityId","generateId","textId","textNode","entityWidth","entityHeight","rectBBox","adjustEntities","getEdgeName","addRelationships","g","relCnt","drawRelationshipFromLayout","svg","insert","diagObj","edge","lineFunction","line","curveBasis","svgPath","url","labelPoint","labelId","draw","text","id","_version","securityLevel","sandboxElement","select","graphlib.Graph","firstEntity","dagreLayout","padding","utils","svgBounds","width","height","configureSvgSize","MERMAID_ERDIAGRAM_UUID","prefix","simplifiedStr","strWithHyphen","erRenderer","getStyles","options","erStyles","diagram","erParser"],"mappings":"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"}