mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-03 20:34:20 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			36 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import type { JSONSchemaType } from 'ajv/dist/2019.js';
 | 
						|
import type { MermaidConfig } from '../packages/mermaid/src/config.type.js';
 | 
						|
import { readFile } from 'node:fs/promises';
 | 
						|
import { getDefaults, getSchema, loadSchema } from '../.build/jsonSchema.js';
 | 
						|
 | 
						|
/**
 | 
						|
 * ESBuild plugin that handles JSON Schemas saved as a `.schema.yaml` file.
 | 
						|
 *
 | 
						|
 * Use `my-example.schema.yaml?only-defaults=true` to only load the default values.
 | 
						|
 */
 | 
						|
 | 
						|
export const jsonSchemaPlugin = {
 | 
						|
  name: 'json-schema-plugin',
 | 
						|
  setup(build) {
 | 
						|
    let schema: JSONSchemaType<MermaidConfig> | undefined = undefined;
 | 
						|
    let content = '';
 | 
						|
 | 
						|
    build.onLoad({ filter: /config\.schema\.yaml$/ }, async (args) => {
 | 
						|
      // Load the file from the file system
 | 
						|
      const source = await readFile(args.path, 'utf8');
 | 
						|
      const resolvedSchema: JSONSchemaType<MermaidConfig> =
 | 
						|
        content === source && schema ? schema : loadSchema(source, args.path);
 | 
						|
      if (content !== source) {
 | 
						|
        content = source;
 | 
						|
        schema = resolvedSchema;
 | 
						|
      }
 | 
						|
      const contents = args.suffix.includes('only-defaults')
 | 
						|
        ? getDefaults(resolvedSchema)
 | 
						|
        : getSchema(resolvedSchema);
 | 
						|
      return { contents, warnings: [] };
 | 
						|
    });
 | 
						|
  },
 | 
						|
};
 | 
						|
 | 
						|
export default jsonSchemaPlugin;
 |