mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-04 04:44:08 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			270 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			270 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import type { RequiredDeep } from 'type-fest';
 | 
						|
 | 
						|
import theme from './themes/index.js';
 | 
						|
import type { MermaidConfig } from './config.type.js';
 | 
						|
 | 
						|
// Uses our custom Vite jsonSchemaPlugin to load only the default values from
 | 
						|
// our JSON Schema
 | 
						|
// @ts-expect-error This file is automatically generated via a custom Vite plugin
 | 
						|
import defaultConfigJson from './schemas/config.schema.yaml?only-defaults=true';
 | 
						|
 | 
						|
/**
 | 
						|
 * Default mermaid configuration options.
 | 
						|
 *
 | 
						|
 * Please see the Mermaid config JSON Schema for the default JSON values.
 | 
						|
 * Non-JSON JS default values are listed in this file, e.g. functions, or
 | 
						|
 * `undefined` (explicitly set so that `configKeys` finds them).
 | 
						|
 */
 | 
						|
const config: RequiredDeep<MermaidConfig> = {
 | 
						|
  ...defaultConfigJson,
 | 
						|
  // Set, even though they're `undefined` so that `configKeys` finds these keys
 | 
						|
  // TODO: Should we replace these with `null` so that they can go in the JSON Schema?
 | 
						|
  deterministicIDSeed: undefined,
 | 
						|
  themeCSS: undefined,
 | 
						|
 | 
						|
  // add non-JSON default config values
 | 
						|
  themeVariables: theme['default'].getThemeVariables(),
 | 
						|
  sequence: {
 | 
						|
    ...defaultConfigJson.sequence,
 | 
						|
    messageFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.messageFontFamily,
 | 
						|
        fontSize: this.messageFontSize,
 | 
						|
        fontWeight: this.messageFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
    noteFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.noteFontFamily,
 | 
						|
        fontSize: this.noteFontSize,
 | 
						|
        fontWeight: this.noteFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
    actorFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.actorFontFamily,
 | 
						|
        fontSize: this.actorFontSize,
 | 
						|
        fontWeight: this.actorFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
  },
 | 
						|
  gantt: {
 | 
						|
    ...defaultConfigJson.gantt,
 | 
						|
    tickInterval: undefined,
 | 
						|
    useWidth: undefined, // can probably be removed since `configKeys` already includes this
 | 
						|
  },
 | 
						|
  c4: {
 | 
						|
    ...defaultConfigJson.c4,
 | 
						|
    useWidth: undefined,
 | 
						|
    personFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.personFontFamily,
 | 
						|
        fontSize: this.personFontSize,
 | 
						|
        fontWeight: this.personFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    external_personFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.external_personFontFamily,
 | 
						|
        fontSize: this.external_personFontSize,
 | 
						|
        fontWeight: this.external_personFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    systemFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.systemFontFamily,
 | 
						|
        fontSize: this.systemFontSize,
 | 
						|
        fontWeight: this.systemFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    external_systemFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.external_systemFontFamily,
 | 
						|
        fontSize: this.external_systemFontSize,
 | 
						|
        fontWeight: this.external_systemFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    system_dbFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.system_dbFontFamily,
 | 
						|
        fontSize: this.system_dbFontSize,
 | 
						|
        fontWeight: this.system_dbFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    external_system_dbFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.external_system_dbFontFamily,
 | 
						|
        fontSize: this.external_system_dbFontSize,
 | 
						|
        fontWeight: this.external_system_dbFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    system_queueFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.system_queueFontFamily,
 | 
						|
        fontSize: this.system_queueFontSize,
 | 
						|
        fontWeight: this.system_queueFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    external_system_queueFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.external_system_queueFontFamily,
 | 
						|
        fontSize: this.external_system_queueFontSize,
 | 
						|
        fontWeight: this.external_system_queueFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    containerFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.containerFontFamily,
 | 
						|
        fontSize: this.containerFontSize,
 | 
						|
        fontWeight: this.containerFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    external_containerFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.external_containerFontFamily,
 | 
						|
        fontSize: this.external_containerFontSize,
 | 
						|
        fontWeight: this.external_containerFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    container_dbFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.container_dbFontFamily,
 | 
						|
        fontSize: this.container_dbFontSize,
 | 
						|
        fontWeight: this.container_dbFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    external_container_dbFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.external_container_dbFontFamily,
 | 
						|
        fontSize: this.external_container_dbFontSize,
 | 
						|
        fontWeight: this.external_container_dbFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    container_queueFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.container_queueFontFamily,
 | 
						|
        fontSize: this.container_queueFontSize,
 | 
						|
        fontWeight: this.container_queueFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    external_container_queueFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.external_container_queueFontFamily,
 | 
						|
        fontSize: this.external_container_queueFontSize,
 | 
						|
        fontWeight: this.external_container_queueFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    componentFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.componentFontFamily,
 | 
						|
        fontSize: this.componentFontSize,
 | 
						|
        fontWeight: this.componentFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    external_componentFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.external_componentFontFamily,
 | 
						|
        fontSize: this.external_componentFontSize,
 | 
						|
        fontWeight: this.external_componentFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    component_dbFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.component_dbFontFamily,
 | 
						|
        fontSize: this.component_dbFontSize,
 | 
						|
        fontWeight: this.component_dbFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    external_component_dbFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.external_component_dbFontFamily,
 | 
						|
        fontSize: this.external_component_dbFontSize,
 | 
						|
        fontWeight: this.external_component_dbFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    component_queueFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.component_queueFontFamily,
 | 
						|
        fontSize: this.component_queueFontSize,
 | 
						|
        fontWeight: this.component_queueFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    external_component_queueFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.external_component_queueFontFamily,
 | 
						|
        fontSize: this.external_component_queueFontSize,
 | 
						|
        fontWeight: this.external_component_queueFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    boundaryFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.boundaryFontFamily,
 | 
						|
        fontSize: this.boundaryFontSize,
 | 
						|
        fontWeight: this.boundaryFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
 | 
						|
    messageFont: function () {
 | 
						|
      return {
 | 
						|
        fontFamily: this.messageFontFamily,
 | 
						|
        fontSize: this.messageFontSize,
 | 
						|
        fontWeight: this.messageFontWeight,
 | 
						|
      };
 | 
						|
    },
 | 
						|
  },
 | 
						|
  pie: {
 | 
						|
    ...defaultConfigJson.pie,
 | 
						|
    useWidth: 984,
 | 
						|
  },
 | 
						|
  requirement: {
 | 
						|
    ...defaultConfigJson.requirement,
 | 
						|
    useWidth: undefined,
 | 
						|
  },
 | 
						|
  gitGraph: {
 | 
						|
    ...defaultConfigJson.gitGraph,
 | 
						|
    // TODO: This is a temporary override for `gitGraph`, since every other
 | 
						|
    //       diagram does have `useMaxWidth`, but instead sets it to `true`.
 | 
						|
    //       Should we set this to `true` instead?
 | 
						|
    useMaxWidth: false,
 | 
						|
  },
 | 
						|
  sankey: {
 | 
						|
    ...defaultConfigJson.sankey,
 | 
						|
    // this is false, unlike every other diagram (other than gitGraph)
 | 
						|
    // TODO: can we make this default to `true` instead?
 | 
						|
    useMaxWidth: false,
 | 
						|
  },
 | 
						|
};
 | 
						|
 | 
						|
const keyify = (obj: any, prefix = ''): string[] =>
 | 
						|
  Object.keys(obj).reduce((res: string[], el): string[] => {
 | 
						|
    if (Array.isArray(obj[el])) {
 | 
						|
      return res;
 | 
						|
    } else if (typeof obj[el] === 'object' && obj[el] !== null) {
 | 
						|
      return [...res, prefix + el, ...keyify(obj[el], '')];
 | 
						|
    }
 | 
						|
    return [...res, prefix + el];
 | 
						|
  }, []);
 | 
						|
 | 
						|
export const configKeys: Set<string> = new Set(keyify(config, ''));
 | 
						|
export default config;
 |